`
yearl
  • 浏览: 6711 次
  • 性别: Icon_minigender_1
  • 来自: 顺德
最近访客 更多访客>>
社区版块
存档分类
最新评论

controller中关联关系的操作

阅读更多
class Reader < ActiveRecord::Base
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :reader
end


关联这两个模型的实例有几种方法

第一种方法:
@book = Book.new(params[:book])
@book.save

新建book,直接将客户端传回的reader_id赋值给book的reader_id字段,保存book即可。
没有显式地调用关联方法,某种程度上相当于直接操作数据库,但达到了关联的效果。比较简单。
这样做有一个问题:没有对客户端传回的reader_id进行校验,可能会破坏数据库的完整性。

第二种方法
@book = Book.new(params[:book])
@book.reader = Reader.find(params[:reader_id])
@book.save

查询数据库,对客户端传回的reader_id进行了校验,显式地调用了关联方法。
这样做有两个问题(哈哈,还多了一个):1.多了一次数据库查询,性能下降;2.存在交叉存取问题,仍可能会破坏数据库的完整性。

第三种方法:
采用第一种方法处理,另外在数据库层面加上外键约束。即可避免以上问题。
分享到:
评论
2 楼 yearl 2009-10-31  
不好意思,没有说明白。
我说的只是简单地关联Reader与Book,与当前用户无关。目的是高效且不会破坏数据库的完整性。
1 楼 fsword 2009-10-31  
没有介绍背景,无从判断优劣,我猜更好的方式应该是这样的

# user.rb
class User < ActiveRecord::Base
  has_one :reading
end

# reading.rb
class Reading < ActiveRecord::Base
  has_many :books
end

# book.rb
class Book < ActiveRecord::Base
  belongs_to :reading
end

# books_constroller.rb
class BooksController < ApplicationController

  before_filter :current_user

  def create
    @current_user.reading.books << Book.new(params[:book])
    ......
  end
end

这里并不放入 reader_id 字段,因为这个信息可能应该在在其它条件下获得

相关推荐

    thinkphp关联模型的使用

    3. **多对多关联(Many-to-Many)**:两个表的记录都可以与对方的多个记录相关联,通常需要一个关联表(或称为中间表)来存储两个表的关联关系。在ThinkPHP中,使用`belongsToMany()`定义多对多关联。例如,用户和...

    ssh2两表关联

    此外,事务管理也至关重要,Spring提供了声明式事务管理,确保在关联操作中的数据一致性。 总结来说,SSH2两表关联是在Struts2负责用户交互,Spring管理业务逻辑和依赖,Hibernate实现对象与数据库表映射的基础上,...

    Mybatis一对多关联关系映射实现过程解析

    在实际开发中,我们经常会遇到一对多关联关系映射的问题,例如用户和订单之间的一对多关系。今天,我们将深入探讨Mybatis的一对多关联关系映射实现过程,并通过示例代码对其进行详细的讲解。 一对多关联关系映射的...

    linkSys.rar_关联

    在处理关联关系时,JDBC允许开发者编写JOIN查询,以获取来自多个表的相关数据。这可能是通过PreparedStatement对象来实现,它可以预编译SQL语句,提高性能,并避免SQL注入攻击。 在关联的系统中,常见的关联类型有...

    Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate

    4. 在DAO中编写SQL语句或HQL(Hibernate Query Language)进行数据操作,利用Hibernate提供的API处理关联关系。 最后,关于文件"38-Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate(1)",它可能是教程的...

    43-Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate(6).rar

    3. **定义数据关联**:设置关联关系,如@OneToOne, @OneToMany, @ManyToOne, @ManyToMany等。 4. **编写DAO**:实现CRUD操作,如Session工厂、事务管理等。 5. **整合Struts**:创建Action类,处理HTTP请求,调用DAO...

    springmvc 两张表增删改查,关联以及登录功能

    比如,我们有两个表,一个是 User 表,另一个是 Role 表,User 表中可能包含对 Role 的引用,形成了一对多的关系。在添加用户时,我们需要处理用户角色的关联;删除用户时,可能需要考虑是否同时删除相关角色;更新...

    Mybatis实现一对一关联查询(Mysql数据库)

    在Java开发中,Mybatis作为一款轻量级的持久层框架,被广泛应用于数据访问操作。本主题将详细探讨如何在Mybatis中实现...总之,正确配置Mybatis的映射文件和Java实体类,可以轻松地实现数据库中一对一关联的查询操作。

    thinkphp城市三级关联

    例如,`ProvinceModel`、`CityModel`和`DistrictModel`,每个模型内可以定义对应表的主键和外键,以及它们之间的关联关系。例如,`CityModel`可能有`province_id`字段,用来关联`ProvinceModel`,`DistrictModel`则...

    ThinkPHP5&5.1框架关联模型分页操作示例

    本知识点将详细分析ThinkPHP5与ThinkPHP5.1框架在处理关联模型时的分页操作,并通过实例向您展示如何实现复杂的关联数据分页。 1. 关联模型的建立 在ThinkPHP5/5.1框架中,关联模型的建立是通过模型(Model)内部的...

    MVC4实体关联 多级分类实现

    在MVC4应用中,我们可以利用Entity Framework的LINQ查询来获取和操作这些关联数据。例如,要获取所有顶级类别,可以写如下代码: ```csharp var topCategories = context.Categories.Where(c =&gt; c.ParentCategoryId...

    hibernate_second4项目源码

    项目中可能会包含专门处理多对多关系的DAO接口及其实现类,用于插入、删除、查询和更新关联关系。 4. **业务逻辑层(Service)**:服务层处理业务逻辑,调用DAO进行数据操作。在多对多关系的场景下,Service层会...

    struts2+hibernate+spring多表操作示例

    在多表操作中,这三个框架协同工作,使得数据的存取和业务逻辑的处理变得更加便捷。以下将详细介绍如何利用Struts2、Hibernate和Spring进行多表操作: 1. **Struts2**:作为前端控制器,Struts2接收用户的HTTP请求...

    39-Hibernate数据关联实现〖MVSN〗_Struts + DAO + Hibernate(2).

    9. **事务管理**:在数据库操作中,事务是确保数据一致性的重要机制。Hibernate提供了对JTA和JDBC事务的支持,本课程会讲解如何在Hibernate中配置和管理事务。 10. **缓存机制**:为了提高性能,Hibernate使用了...

    asp.net中常用的操作类方法

    常用操作包括数据绑定(如与`SqlDataSource`或`ObjectDataSource`关联),列定制,排序,分页,筛选,以及插入、更新和删除数据。可以使用`GridView`的事件(如`RowDataBound`,`RowEditing`等)进行自定义逻辑处理...

    MVC Demo 增删查改

    Controller接收到删除请求后,不仅要从数据库中移除Product,还需要考虑Category的关联,可能需要解除产品与Category的关联,或者直接删除所有相关的产品记录。 **级联关系(Cascading)**:在本Demo中,Product与...

    ssm整合以及关系映射完整项目

    6. **关系映射配置**:在Mapper XML文件中编写SQL语句,使用`&lt;association&gt;`、`&lt;collection&gt;`等标签定义对象间的关系,处理关联查询。 7. **业务逻辑处理**:在Service层编写业务逻辑,调用DAO层的方法进行数据操作...

    struts2+HIbernate 多对一关系 及部分删除

    Struts2是一个MVC(Model-View-Controller)框架,它负责处理用户请求、业务逻辑和视图的交互,而Hibernate则是一个对象关系映射(ORM)框架,简化了数据库操作。本主题将深入探讨如何在Struts2与Hibernate的集成...

    ssm基于关联规则的计算机类考研院校推荐系统源码数据库演示.zip

    关联规则学习是一种数据挖掘方法,常用于发现项集之间的有趣关系,如“如果用户购买了商品A,那么他们很可能也会购买商品B”。在这个考研推荐系统中,可能收集了学生的专业背景、成绩、意向地域等因素,通过关联规则...

Global site tag (gtag.js) - Google Analytics