1

我已经为此工作了一段时间,我似乎无法找到哪里有错误。

我有一个用户模型(:名称,:密码,:电子邮件),事件模型(:名称,:等)和兴趣模型(:名称)[>所有单数<]

然后我创建了两个连接表 -> 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 并且我认为我的所有列名都是正确的..任何人都可以看到缺少什么吗?

4

1 回答 1

2

我建议远离 HABTM,而是使用has_many :through.

这是一篇很棒的博客文章,解释了 SO 用户Jaime Bellmyer所写的差异。

于 2010-02-01T22:25:59.473 回答