【问题标题】:HABTM Relationship and Named ScopesHABTM 关系和命名范围
【发布时间】:2010-02-01 22:20:06
【问题描述】:

我已经为此工作了一段时间,但我似乎无法找到错误所在。

我有一个用户模型(:name, :password, :email),以及事件模型(:name, :etc) 和兴趣模型(:name) [>都是单数

然后我创建了两个连接表 -> UsersInterests 和 EventsInterests;每个不包含主键,仅分别由 user_id/interest_id 和 event_id/interest_id 组成。 [>复数

我的模型包含如下 HABTM 关系

user.rb => has_and_belongs_to_many :interests
event.rb => has_and_belongs_to_many :interests
interest.rb => has_and_belongs_to_many :users
               has_and_belongs_to_many :events
events_interests.rb => has_and_belongs_to_many :interests
                       has_and_belongs_to_many :events
users_interests.rb => has_and_belongs_to_many :users
                      has_and_belongs_to_many :interests

Whew..ok 所以我想创建一个 named_scope 来查找与特定用户有共同兴趣的所有事件。这是有人帮助我的一些代码。

named_scope :shares_interest_with_user, lambda {|user| { :joins => "LEFT JOIN
              events_interests ei ON ei.event_id = Event.id " +
             "LEFT JOIN users_interests ui ON ui.interest_id = ei.interest_id",
           :conditions => ["ui.user_id = ?", user]  }}

当我从控制器运行时 =>

  @user = User.find(1) 
  @events = Event.shares_interest_with_user(@user)

我收到 SQL 错误:“没有这样的列:Event.id: SELECT "events".* FROM "events" LEFT JOIN events_interests ei ON ei.event_id =......."

现在我确定事件模型有一个 id,并且我认为我的所有列名都是正确的。任何人都可以看到缺少什么吗?

【问题讨论】:

    标签: ruby-on-rails relational-database has-and-belongs-to-many


    【解决方案1】:

    我建议不要使用 HABTM,而是使用 has_many :through

    这是一个great blog post,解释了SO用户Jaime Bellmyer所写的差异。

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多