精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-07-27
刚一开始就碰到个也许是简单的问题吧,花了点功夫没搞定,在此请教同道: 用户信息简单地存储在users表中,主要字段为:id,username,password,real_name 设备购买主记录表为eq_buy_master,涉及到关联的字段为:manager,buyer,accepter,operator 因外键都关联到users,故无法使用超方便的user_id。 于是在User中设has_many,写法为: has_many :eqbuymaster EqBuyMaster中设belongs_to,并仿“Agile Rails”中第231页的做法,如下写: belongs_to :user, :class_name => 'User', :foreign_key => 'manager' 于是在_form.rhtml中用select的写法为: <%= collection_select(:eq_buy_master, :manager, @all_users, :id, :real_name) %> 在show.rhtml中显示realname的写法为: <%= @eq_buy_master.user.real_name %></p> 使用正常。 但此处有四个字段都关联,这种做法在_form.rhtml中是正常的,但show.rhtml中显示出来的全都是:manager关联的值,显然不对。在EqBuyMaster中的belongs_to部分用过[]或{},都会报错,不知如何写? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-07-30
看来这不是个“简单问题”了,各位能给个答复吗?
|
|
返回顶楼 | |
发表时间:2007-07-30
belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer'
这样如何? 不知道你问的是不是这个 。 |
|
返回顶楼 | |
发表时间:2007-07-30
关联一个字段可以这样做,但这里有4个。
如果关联的是buyer,show.rhtml中显示出来的全都是:buyer关联的值,这是不对的。如果把4个都写上,则show.rhtml中显示出来的全都是最后一个关联字段的值。 如果是Hibernate的话,关联可以写在映射文件里,无论有几个字段关联,都可以做到。rails不知如何做? |
|
返回顶楼 | |
发表时间:2007-07-30
是不是可以参照这个文章,应当是需要一张关联表:
http://www.ibm.com/developerworks/cn/linux/l-activescaffold/index.html |
|
返回顶楼 | |
发表时间:2007-07-30
下面代码是否可以参考一下:
class User < ActiveRecord::Base belongs_to :organization end class Organization < ActiveRecord::Base has_many :projects has_many :users end class Project < ActiveRecord::Base belongs_to :organization has_many :projects_users has_many :administrators, :through => :projects_users, :source => :user, :conditions => "projects_users.role_type = 3" has_many :managers, :through => :projects_users, :source => :user, :conditions => "projects_users.role_type = 2" has_many :workers, :through => :projects_users, :source => :user, :conditions => "projects_users.role_type = 1" end class ProjectsUser < ActiveRecord::Base belongs_to :project belongs_to :user end |
|
返回顶楼 | |
发表时间:2007-11-27
developworks上的方法的确是可以解决的,但设计上的增加不少复杂性,于是本人在view层做了点“违规”的小手脚,也就解决了。
原帖中的方法其实唯有list.rhtml和show.rhtml中的显示部分有问题,加上如下“违规”代码即可解决,比如: <% buyer_name = User.find(eq_buy_master.handler).real_name %> <td><%=h buyer_name %></td> |
|
返回顶楼 | |
发表时间:2007-11-27
多态关联呀
|
|
返回顶楼 | |
发表时间:2007-11-28
在User中设has_many,写法为:
has_many :mastermanagers, :class_name => 'EqBuyMaster', :foreign_key => 'manager' has_many :masterbuyers, :class_name => 'EqBuyMaster', :foreign_key => 'buyer' has_many :masteraccepters, :class_name => 'EqBuyMaster', :foreign_key => 'accepter' has_many :masteroperators, :class_name => 'EqBuyMaster', :foreign_key => 'operator' EqBuyMaster中设belongs_to,并仿“Agile Rails”中第231页的做法,如下写: belongs_to :manager, :class_name => 'User', :foreign_key => 'manager' belongs_to :buyer, :class_name => 'User', :foreign_key => 'buyer' belongs_to :accepter, :class_name => 'User', :foreign_key => 'accepter' belongs_toperator , :class_name => 'User', :foreign_key => 'operator' 用的时候对应的用就OK了 |
|
返回顶楼 | |
发表时间:2007-11-28
试了楼上的方法,的确有效,在此致谢!
这个问题终于有了个圆满的答案。 |
|
返回顶楼 | |