gpt4 book ai didi

ruby-on-rails - 通过带有连接属性的连接表接受_nested_attributes_for

转载 作者:行者123 更新时间:2023-12-04 05:49:48 26 4
gpt4 key购买 nike

如何在 has_many :through 关联中使用 ActiveRecord 的 accepts_nested_attributes_for 助手,同时向连接表添加属性?

例如,假设我有一个团队模型:

class Team < ActiveRecord::Base
role = Role.find_by_name('player')
has_many :players,
:through => :interactions,
:source => :user,
:conditions => ["interactions.role_id = ?", role.id] do
class_eval do
define_method("<<") do |r|
Interaction.send(:with_scope, :create => {:role_id => role.id}) { self.concat r }
end
end
end
end

团队有_很多 players通过 interactions ,因为一个用户可以担任多个角色(玩家、经理等)。

如何在使用 accepts_nested_attributes_for 的同时向连接表添加属性?

如果我有现有的团队记录 team和现有的用户记录 user ,我可以做这样的事情:
team.players << user
team.players.size
=> 1

但是如果我创建一个带有嵌套玩家的新团队:
team = Team.create(:name => "New York Lions", 
:players_attributes => [{:name => 'John Doe'}])
team.players.size
=> 0

在最后一个示例中,创建了团队、用户和交互记录(并且团队确实通过交互拥有用户),但这里没有设置交互角色 ID 属性。

最佳答案

class Team < ActiveRecord::Base
accepts_nested_attributes_for :interactions

class Interaction < ActiveRecord::Base
accepts_nested_attributes_for :players


team = Team.create(:name => "New York Lions", :interactions_attribues => [{
:players_attributes => [{:name => 'John Doe'}]}])

我没有检查创建,所以数组和散列可能有点困惑,但你明白了。您需要团队和交互模型上的 accepts_nested_attributes。

关于ruby-on-rails - 通过带有连接属性的连接表接受_nested_attributes_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3762947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com