如何在表单中创建新实例时传递:id

时间:2014-07-10 17:34:04

标签: ruby-on-rails

我有2个模特,Lanzadera和Addict。

Lanzadera has_many :addicts
Addict belongs_to :lanzadera

我有一个Lanzaderas列表,旁边有一个“注册”按钮,这将呈现Addict新表单。

然后,用户将使用Addict属性填写表单,该addict应该列在该特定的lanzadera中。所以,这一切都是关于在lanzaderas中列出成瘾者。

一切看起来都很棒,我可以在日志中看到lanzadera_id,但当我说@lanzadera.addicts.count它会放0。这意味着,正在创建成瘾者,但没有被分配给它的兰扎德拉。

控制器强参数lanzadera_id中允许

addict_params

我的问题是,在创建新的lanzadera_id时如何在表单中传递Addict,以便在Lanzadera内列出上瘾?

Started POST "/lanzaderas/1/addicts" for 127.0.0.1 at 2014-07-10 19:25:41 +0200
Processing by AddictsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"mJ7pl2xsjhwhdGM2RZBDA+fmD75tpZcsPIaeSwYaBhE=", "addict"=>{"name"=>"Kike", "email"=>"kikeisasi@gmail.com", "city"=>"65", "postal"=>"56478", "street"=>"Aiboa 19, 4", "lanzadera_id"=>""}, "commit"=>"Crear Addict", "lanzadera_id"=>"1"}
   (0.2ms)  BEGIN
  SQL (0.7ms)  INSERT INTO "addicts" ("city", "created_at", "email", "name", "postal", "street", "updated_at") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"  [["city", "65"], ["created_at", Thu, 10 Jul 2014 17:25:41 UTC +00:00], ["email", "kikeisasi@gmail.com"], ["name", "Kike"], ["postal", 56478], ["street", "Aiboa 19, 4"], ["updated_at", Thu, 10 Jul 2014 17:25:41 UTC +00:00]]

1 个答案:

答案 0 :(得分:0)

我的猜测是你错过了数据库中Addicts表中的landazera_id。当它开始INSERT INTO行时,它不会将id列为其中一列。如果还没有,请确保'landazera_id'迁移到表中。 Rails不会根据您的has_manybelongs_to关联自动执行此操作(或者至少我从未想过如何自动执行此操作),因此您必须自己进行迁移。< / p>

rails g migration add_landazera_id_to_addicts landazera_id:integer

在文本编辑器中检查迁移以确保正确生成。它应该包括:

def change
    add_column :addicts, :landazera_id, :integer
end