如何在rails中使用连接表正确搜索模型?

时间:2014-02-10 15:57:31

标签: ruby-on-rails rails-activerecord

我正在尝试为用户事件设置设置我的模型和控制器。这是用户注册活动的多对多设置。我已经创建了连接表('users_events')。

到目前为止,我有:

型号:

class User < ActiveRecord::Base
    has_and_belongs_to_many :events, join_table: 'users_events'
end

class Event < ActiveRecord::Base
    has_and_belongs_to_many :users, join_table: 'users_events'
end

我希望能够查询用户注册的所有事件。这个查询应该放在哪里?在users_controller或events_controller中?搜索/查找代码会是什么样的?

2 个答案:

答案 0 :(得分:1)

首先,users_events违反了rails约定。 Rails按字母顺序推断表名,因此该表应命名为:events_users

然后你可以做以下事情:

      current_user.events

或者

     event = Event.create!(name: "foo")
     current_user.events << event

反之亦然......这样你也不需要在你的模型中提到连接表。

答案 1 :(得分:0)

我能够弄清楚。正如我在对Nikolai的回复中详细阐述的那样,我也有一对多的关系,因为一个事件belongs_to(由用户创建),所以user.events给了我用户创建的事件,而不是它们是什么主治。以下是我解决它的方法。

class User < ActiveRecord::Base
    has_many :events
    has_and_belongs_to_many :attending_events, class_name: 'Event'
end

class Event < ActiveRecord::Base
    belongs_to :user
    has_and_belongs_to_many :attendees, class_name: 'User'
end