我有型号
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"=>"✓","authenticity_token"=>"CVkdBHLzLAeQ8FRFBVyonUuyn1FZAYG+X9fX/mmj+neneneba Bo=","riskfactor"=>{"body_ids"=>[","1"],"position"=>"1","slug"=>"risk-factor-2","name_ru"=>"高血压","published_ru"/>"否","content_ru"=]","metadescription_ru"=>","meta_keywords_ru"=>","name_en"=>"高血压","published_en"/>"否","content_en"=]">
高血压;高血压;高血压;高血压;高血压
users
.*FROM users
WHERE users
。id
=users
的1阶。id
ASC极限1风险因素负载(0.3ms(选择riskfactors
.*从riskfactors
到riskfactors
。id
=4极限1(0.1ms(开始Body Load(0.3ms(SELECT bodies
.*FROM bodies
WHERE bodies
。id
=1 ORDER BY位置限制1Body Load(2.6ms(SELECT bodies
.*FROM bodies
INNER JOIN bodies_riskfactors
ON bodies
。CCD_ 19=CCD_。body_id
,其中bodies_riskfactors
。riskfactor_id
=4 ORDER BY位置风险因素::转换加载(0.3ms(选择riskfactor_translations
.*从riskfactor_translations
到riskfactor_translations
。riskfactor_id
=4风险因素存在(0.6ms(从riskfactors
中选择1为一,其中(riskfactors
.slug
='风险因素-2'AND riskfactors
.id
!=4(LIMIT 1(0.2ms(回滚在15毫秒中完成500内部服务器错误
NoMethodError(更新中未定义的方法body' for #<Riskfactor:0x007f9a0351c350>):
app/controllers/admin/riskfactors_controller.rb:45:in
块app/controllers/admin/riskfactors_controller.rb:44:在"更新"中
风险因素控制器
class Admin::RiskfactorsController < Admin::BaseController
before_action :set_riskfactor, only: [:show, :edit, :update, :destroy]
def update
respond_to do |format|
if @riskfactor.update(riskfactor_params)
format.html { redirect_to [:edit, :admin, @riskfactor], notice: 'Riskfactor was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @riskfactor.errors, status: :unprocessable_entity }
end
end
end
private
def set_riskfactor
@riskfactor = Riskfactor.find(params[:id])
end
def riskfactor_params
params.require(:riskfactor).permit!
end
end
Imho问题是您的视图中有body_ids
,但您将关联命名为bodies
。尝试将body_ids
重命名为bodies_ids
或类似的名称。