导轨通过未定义的方法"body"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"=>"✓","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"=]">

高血压;高血压;高血压;高血压;高血压

","meta_description_en"=>","meta_keywords_en"=>"},"button"=>","id"=>"4"}用户负载(0.3ms(SELECT users.*FROM users WHERE usersidusers的1阶。id ASC极限1风险因素负载(0.3ms(选择riskfactors.*从riskfactorsriskfactorsid=4极限1(0.1ms(开始Body Load(0.3ms(SELECT bodies.*FROM bodies WHERE bodiesid=1 ORDER BY位置限制1Body Load(2.6ms(SELECT bodies.*FROM bodies INNER JOIN bodies_riskfactors ON bodies。CCD_ 19=CCD_。body_id,其中bodies_riskfactorsriskfactor_id=4 ORDER BY位置风险因素::转换加载(0.3ms(选择riskfactor_translations.*从riskfactor_translationsriskfactor_translationsriskfactor_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或类似的名称。

最新更新