我是铁杆新手,仍在学习这些联想,而且我一直坚持模特关系。
我有一个我希望与两个父模型相关联的模型,以便在创建该模型的实例时,它会自动与两个父模型相关联。我不确定这是否是一种多态关系。如果是,有人可以告诉我如何处理创建,以便它创建正确的链接。我不是从文档中获得多态关系。
目前我正在使用一个模型进行创建并将条目添加到另一个模型。我想有一种方法可以让它自动发生,但我不知道该怎么做。
当前实施:
entry = @pool.entries.create(new_entry_params)
current_user.entries << entry
current_user.save
我想以这种方式进行设置,以便我可以轻松地从用户实例和池实例中显示特定用户的所有条目。
以下是我目前为模型/数据库设置所做的事情:
型号:
class User < ActiveRecord::Base
has_many :pools, through: :pool_memberships, dependent: :destroy
has_many :entries, dependent: :destroy
end
class Pool < ActiveRecord::Base
has_many :users, through: :pool_memberships, dependent: :destroy
has_many :entries, dependent: :destroy
end
class Entry < ActiveRecord::Base
belongs_to :user
belongs_to :pool
end
条目迁移表:
class CreateEntries < ActiveRecord::Migration
def change
create_table :entries do |t|
t.references :pool, index: true
t.references :user, index: true
t.string :name
t.integer :pool_id
t.integer :user_id, index: true
t.timestamps
end
end
end
这是“Rails”这样做的方式吗?或者我离开基地了。谢谢你的帮助!
答案 0 :(得分:0)
首先,您不需要current_user.save
,因为您没有修改current_user对象。 :)
这应该可以解决问题:
@pool.entries.create(new_entry_params.merge(:user_id => current_user.id))
答案 1 :(得分:0)
在ActiveRecord中,多态关系是模型可能具有多个可能父项之一的关系,但它仍然只有一个父项。它是多态的,因为你不知道父类的类型,但你应该可以互换地对待它们。但由于你希望你的模型同时拥有两个父母,这不是你想要的。
您的实现看起来很好,但没有理由调用current_user.save。测试一下,你会发现在这种情况下&lt;&lt; operator实际上会在连接表中触发数据库插入。