Dan*_*Dan 6 activerecord ruby-on-rails rails-activerecord ruby-on-rails-5
我有3个相关的表格/模型。我想检索已组织了party的用户,给定Party记录,带有布尔organized列的联接表,以及users表。
我最好的尝试,到目前为止(这个是很有道理的我以后多摆弄)。我省略了不相关的列。
class Party
# party_id
has_many :parties_users
has_many :users, through: :parties_users, source: :user
has_one :organizer,
-> { where organizer: true },
through: :parties_users,
source: :user
Run Code Online (Sandbox Code Playgroud)
class PartiesUser
# party_id
# user_id
# organized:bool
belongs_to :party
belongs_to :user
Run Code Online (Sandbox Code Playgroud)
class User
# user_id
has_many : parties_users
Run Code Online (Sandbox Code Playgroud)
上面的设置引发以下错误,老实说,我并没有完全理解:
ActiveRecord::HasOneThroughCantAssociateThroughCollection (Cannot have a has_one :through association 'Party#organizer' where the :through association 'Party#parties_users' is a collection. Specify a has_one or belongs_to association in the :through option instead.)
我知道我可以通过实例方法来执行此操作,但是考虑到使用的频率类型,将其作为关联可以极大地受益于我的应用程序。
如错误消息所述,您不能通过has_many拥有has_one。
如果组织者标志在连接记录上,则可以(代替)这样做。
has_many :parties_users
has_many :users, through: :parties_users, source: :user
has_one :main_party_user, -> {where organizer: true}, class_name: 'PartiesUser'
has_one :organizer, through: :main_party_user, class_name: 'User'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |