rails has_many通过undefined方法`body'for

时间:2014-05-29 13:34:32

标签: ruby-on-rails has-many

我有模特

class Riskfactor < ActiveRecord::Base
  has_many :bodies_riskfactors
  has_many :bodies, through: :bodies_riskfactors    
end

class Body < ActiveRecord::Base
  has_many :bodies_riskfactors
  has_many :riskfactors, through: :bodies_riskfactors   
end

class DisordersArticle < ActiveRecord::Base
  belongs_to :disorder
  belongs_to :article   
end

在视图中

= form_for [:admin, @riskfactor], html: {role: "form"} do |f|
  = f.select :body_ids, Body.all.collect {|x| [x.name, x.id]}, {}, :multiple => true

我在更新时遇到错误

可能出现什么问题?

Processing by Admin::RiskfactorsController#update as HTML

参数:{“utf8”=&gt;“✓”,“authenticity_token”=&gt;“CVkdBHLzLAeQ8FRFBVyonUuyn1FZAYG + X9fX / mmj + Bo =”,“riskfactor”=&gt; {“body_ids”=&gt; [“”, “1”],“位置”=&gt;“1”,“slug”=&gt;“risk-factor-2”,“name_ru”=&gt;“高血压”,“published_ru”=&gt;“否” ,“content_ru”=&gt;“”,“meta_description_ru”=&gt;“”,“meta_keywords_ru”=&gt;“”,“name_en”=&gt;“高血压”,“published_en”=&gt;“否”, “content_en”=&gt;“

高血压高血压高血压高血压高血压

”,“meta_description_en”=&gt;“”,“meta_keywords_en “=&gt;”“},”按钮“=&gt;”“,”id“=&gt;”4“}   用户负载(0.3ms)SELECT users。* FROM users WHERE usersid = 1 ORDER BY usersid ASC LIMIT 1   Riskfactor加载(0.3ms)SELECT riskfactors。* FROM riskfactors WHERE riskfactorsid = 4 LIMIT 1    (0.1ms)BEGIN   Body Load(0.3ms)SELECT bodies。* FROM bodies WHERE bodiesid = 1 ORDER BY position LIMIT 1   身体负荷(2.6ms)选择bodies。* FROM bodies内部加入bodies_riskfactors ON bodiesid = bodies_riskfactors。{{1} } WHERE body_idbodies_riskfactors = 4 ORDER BY位置   Riskfactor ::翻译负载(0.3ms)SELECT riskfactor_id。* FROM riskfactor_translations WHERE riskfactor_translationsriskfactor_translations = 4   Riskfactor存在(0.6ms)SELECT 1 AS一个来自riskfactor_id WHERE(riskfactorsriskfactors ='risk-factor-2'和slugriskfactors! = 4)限制1    (0.2ms)ROLLBACK 在15毫秒内完成500内部服务器错误

NoMethodError(更新中未定义的方法id阻止'   app / controllers / admin / riskfactors_controller.rb:44:在`update'

RiskfactorsController

body' for #<Riskfactor:0x007f9a0351c350>):
  app/controllers/admin/riskfactors_controller.rb:45:in

1 个答案:

答案 0 :(得分:0)

Imho问题是您的视图中有body_ids,但您将关联命名为bodies。尝试将body_ids重命名为bodies_ids或类似名称。