问题
The parent is saved but the children isn't. If I add landslide.sources.create
, it does create a row in sources
table with the correct landslide_id
but all the other columns are null. Here's the files:
landslide_controller.rb
def new
@landslide = Landslide.new
@landslide.sources.build
end
def create
landslide = Landslide.new(landslide_params)
landslide.save
end
def landslide_params
params.require(:landslide).permit(:start_date, :continent, :country, :location, :landslide_type, :lat, :lng, :mapped, :trigger, :spatial_area, :fatalities, :injuries, :notes, source_attributes: [ :url, :text ])
end
sources_controller.rb
def new
source = Source.new
end
def create
source = Source.new(source_params)
source.save
end
def source_params
params.require(:source).permit(:url, :text)
end
_form.html.haml
= form_for :landslide, :url => {:controller => 'landslides', :action => 'create'} do |f|
.form-inputs
%form#landslideForm
#Fields
%fieldset
%legend Source
= f.fields_for :sources do |s|
.form-group.row
= s.label :url, class: 'col-sm-2 col-form-label'
.col-sm-10
= s.text_field :url, class: "form-control"
.form-group.row
= s.label :text, class: 'col-sm-2 col-form-label'
.col-sm-10
= s.text_field :text, class: "form-control"
.form-actions
= f.button :submit, class: "btn btn-lg btn-primary col-sm-offset-5", id: "submitButton"
landslide.rb and source.rb
class Source < ApplicationRecord
belongs_to :landslide, inverse_of: :sources
end
class Landslide < ApplicationRecord
has_many :sources, dependent: :destroy, inverse_of: :landslide
accepts_nested_attributes_for :sources
** routes.rb **
resources :landslides do
resources :sources
end
回答1:
According to your code it is expected to create source
with null field. Because of landslide.sources.create
here you are creating source
with out any attribute values.
To successfully save source
follow the following step.
- build
source
on controller's new methoddef new @landslide = Landslide.new @landslide.sources.build end
User
@landslide
(declared onnew
) on the form= form_for @landslide
and other thing will remain same.remove
landslide.sources.create
from yourlandslide_controller.rb
becausesource
will save automatically after savinglandslide
.
Hope above changes will solve your problem.
来源:https://stackoverflow.com/questions/43669655/rails-unpermitted-nested-children-parameters