未允许的参数嵌套属性 – rails

我正在尝试将表单提交到2个表,但不知怎的,我在这一行joins: ['sources'], :landslide_id了这个语法错误unexpected '\n' joins: ['sources'], :landslide_id found unpermitted parameter: sources joins: ['sources'], :landslide_idfound unpermitted parameter: sources滑坡参数的found unpermitted parameter: sources 。 这是所有文件

楷模

 class Landslide < ApplicationRecord has_many :sources, dependent: :destroy accepts_nested_attributes_for :sources class Source < ApplicationRecord belongs_to :landslide end 

landslides_controller.rb

  def new @landslide = Landslide.new @landslide.sources.build end # POST /landslides def create @landslide = Landslide.new(landslide_params) @landslide.save end private # Use callbacks to share common setup or constraints between actions. def set_landslide render json: Landslide.find(params[:total_id]), joins: ['sources'], :landslide_id end # Only allow a trusted parameter "white list" through. def landslide_params params.require(:landslide).permit(:start_date, :continent, :country, :location, :landslide_type, :lat, :lng, :mapped, :trigger, :spatial_area, :fatalities, :injuries, :notes, sources_attributes: [ :url, :text ]) end 

sources_controller.rb

  def set_source @source = Source.find(params[:id]) end # Only allow a trusted parameter "white list" through. def source_params params.require(:source).permit(:url, :text) end 

_form.html.haml

 = form_for :landslide, :url => {:controller => 'landslides', :action => 'create'} do |f| #something %fieldset %legend Source = f.fields_for :sources do |s| .form-group.row %label.col-sm-2.col-form-label{for: "textinput"}URL .col-sm-10 = s.text_field :url, class: "form-control" .form-group.row %label.col-sm-2.col-form-label{for: "textinput"}Text .col-sm-10 = s.text_field :text, class: "form-control" 

请求

  {"utf8"=>"✓", "authenticity_token"=>"W3m2dLTGyuPCbP6+pStWDfgpIbPzGdl4tvf01vMAbyozzkimqlXH4B/RtwBcsLb+iiBqms7EHagY+Anbpo4zNg==", "landslide"=> {"start_date(3i)"=>"27", "start_date(2i)"=>"4", "start_date(1i)"=>"2017", "continent"=>"Africa", "country"=>"Country", "location"=>"Location", "landslide_type"=>"1", "lat"=>"1", "lng"=>"1", "mapped"=>"False", "spatial_area"=>"1", "fatalities"=>"1", "injuries"=>"1", "notes"=>"1", "trigger"=>"1", "sources"=>{"url"=>"url", "text"=>"text"}}, "button"=>""} 

错误截图

发现未经许可的参数:来源

根据您的表单,看起来源代码位于名为sources而不是sources_attributes的param中。 编辑您的landslide_params ,将sources_attributes更改为源。

我可以问一下set_landslide试图呈现什么,或者如果我在下面错了,请纠正我? 将joins放在新行上会导致错误。 我在想你正在尝试做类似的事情:

 landslide = Landslide.find(params[:total_id]) render json: landslide.to_json(:include => { :sources => { landslide_params[:sources] }}) 

哪个会给你一个json与滑坡对象和一个源数组。 滑坡id应位于滑坡物体内。 这当然假设你正在寻找的东西。