【问题标题】:rails, how to alias a relation in model?rails,如何给模型中的关系起别名?
【发布时间】:2012-05-31 04:41:16
【问题描述】:

我需要覆盖关系的名称,这是我的模型:

class User < ActiveRecord::Base

  has_many :class_rooms_member_ships

  has_many :class_rooms
  has_many :class_rooms, :through=> :class_rooms_member_ships

end

现在,当我想获得class_rooms :through=&gt; :class_rooms_member_ships 时,我需要使用另一个名称

我怎样才能做到这一点:

user.class_rooms
user.class_rooms_through

有什么想法吗?

【问题讨论】:

  • 但是,我的情况有点不同,我使用 has_many through
  • 问题的标题在某种程度上具有误导性。严格来说,您并没有要求问题中所述的别名。因为这意味着该关联仍然必须通过其原始名称访问。相反,您正在寻求一种定义关联名称的方法。标题中问题的答案大概是alias_attribute

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:
has_many :classrooms_though_memberships, :through=> :class_rooms_member_ships, 
                                     :class_name => 'ClassRoom', 
                                     :foreign_key => 'class_room_id',
                                     :source => :class_room

这应该可行。

【讨论】:

  • 对了,很好用,好像是源码不见了,谢谢
  • class_nameforeign_key 应该不是必需的,source 指定关系名称。
【解决方案2】:

这样的事情应该可以工作:

has_many :classrooms_though_memberships, :through=> :class_rooms_member_ships, 
                                         :class_name => 'ClassRoom', 
                                         :foreign_key => 'class_room_id'

【讨论】:

  • 我试过了,但是,我遇到了这个错误:ClassRoomsMemberShipsController#index 中的 ActiveRecord::HasManyThroughSourceAssociationNotFoundError 在模型 ClassRoomsMemberShip 中找不到源关联:classrooms_though_membership 或 :classrooms_though_memberships。试试 'has_many :classrooms_though_memberships, :through => :class_rooms_member_ships, :source => '。它是其中之一吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2013-04-19
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
相关资源
最近更新 更多