Ruby on rails 如何在rails中使用联接表正确搜索模型?
我正在尝试为用户事件设置设置模型和控制器。这是一个多对多的设置,用户可以注册活动。我已经创建了联接表(“用户\事件”) 到目前为止,我已经: 型号:Ruby on rails 如何在rails中使用联接表正确搜索模型?,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,我正在尝试为用户事件设置设置模型和控制器。这是一个多对多的设置,用户可以注册活动。我已经创建了联接表(“用户\事件”) 到目前为止,我已经: 型号: 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,
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
class用户
我希望能够查询用户注册的所有事件。这个查询应该去哪里?在用户\控制器或事件\控制器中?搜索/查找代码是什么样子的?首先,用户事件违反了rails惯例。Rails按字母顺序推断表名,因此表应命名为:events\u users 然后你可以做如下事情:
current_user.events
或
event=event.create!(名称:“富”)
current_user.events我能够理解它。正如我在给Nikolai的回复中所阐述的,我也有一对多的关系,事件属于(由)用户,因此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
class用户
您只需做一个用户即可。首先.events
要获取所有用户事件,无需定义,请加入表格:“users\u events”
rails by convention可以自动映射,这只是一个示例。(如在伪代码中)。可以执行User.first或users=User.all;event=event.create!(名字:“foo”)然后是users.each do | u | u.events我想我假设不管发生什么事情,都会创建一个有很多参与者的事件,或者你可能会创建一个有很多事件的用户,然后它对用户来说是唯一的:)感谢关于连接表中字母顺序的提示,我不知道这一点。我本应该对我所做的更彻底。这些模型还具有一对多关系,即事件属于:user
,而用户具有多个:事件
。这是为了表明是谁创建了事件,因此当前用户。events
向我提供了用户创建的事件,而不是他们注册的事件。@Nikolai Manek:请编辑答案,而不是评论。
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