0

我是 Rails 新手,仍在学习关联,我被困在模型关系中。

我有一个想要与两个父模型关联的模型,以便在创建该模型的实例时,它会自动与两个父模型关联。我不确定这是否是多态关系。如果是,有人可以告诉我如何处理创建,以便创建正确的链接。我并没有从文档中获得多态关系。

目前我正在使用一个模型进行创建并将条目添加到另一个模型。我想有一种方法可以让这种情况自动发生,但我不知道该怎么做。

当前实施:

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”方式吗?还是我离基地太远了。谢谢你的帮助!

4

2 回答 2

0

首先,您不需要current_user.save,因为您没有修改 current_user 对象。:)

这应该可以解决问题:

@pool.entries.create(new_entry_params.merge(:user_id => current_user.id))
于 2013-09-11T20:52:00.820 回答
0

在 ActiveRecord 中,多态关系是一种模型可能有几个可能的父级之一,但它仍然只有一个父级的关系。它是多态的,因为您不知道父级将是哪种类型,但您应该能够互换地对待它们。但是由于您希望您的模型同时有两个父母,这不是您想要的。

您的实现看起来不错,尽管没有理由调用 current_user.save。测试一下,您会发现在这种情况下,<< 运算符实际上触发了连接表中的数据库插入。

于 2013-09-11T21:08:59.437 回答