Проблема в форме и стилях из-за нескольких типов. Ruby on Rails
Передаёться обьект как другая модель, поэтому не работает корректно возвращение к форме, после неудачно заданых значений. Когда указаны неверные аргументы в полях или просто неуказаны, меня вертает на форму для правки результата, но тогда обьект уже не с теми id, для которых всё писалось.

Контроллер:
def new
@place = Place.new
@address = Address.new
@picture = Picture.new
end
def create
@place = current_user.places.build(place_params.except(:address, :picture))
@address = @place.build_address(place_params.require(:address))
@picture = @place.pictures.build(place_params.require(:picture))
if @place.save
@address.save
@picture.save
flash[:info] = 'Place created'
redirect_to places_path
else
render :new
end
end
params.require(:place).permit(:title,
:description,
:price,
:type,
address: [:country,
:state_region,
:city,
:details],
picture: [:image_cache, { image: [] }])
Вьюшки:
= form_for(@place, url: places_path) do |f|
.row.justify-content-center.form-row
.col-xl-4
.blur
.col-lg-12
.mb-2.row
.col-md-12
p = f.label 'Title'
= f.text_field :title, placeholder: 'My first place', alt: 'Title'
.mb-2.row
.col-md-12
p = f.label 'Type'
= f.select :type, ['Accommodation', 'Workspace'], alt: 'Type'
.mb-2.row
.col-md-12
p = f.label 'Description'
= f.text_area :description, placeholder: 'Something about your place..', alt: 'Description', size: '80'
.mb-2.row
.col-md-12
p = f.label 'Price'
= f.text_field :price, alt: 'Price'
a.dollar $
.col-xl-5
.blur
.col-lg-12
= f.fields_for @address do |a|
.mb-2.row
.col-md-12
p = a.label 'Address'
= a.text_field :details, placeholder: 'Like street, number of house..', alt: 'Address'
.mb-2.row
.col-md-12
p = a.label 'City'
= a.text_field :city, placeholder: 'City..', alt: 'city'
.mb-2.row
.col-md-12
p = a.label 'State / Region'
= a.text_field :state_region, placeholder: 'Your state or region..', alt: 'State or region'
.mb-2.row
.col-md-12
p = a.label 'Country'
= a.country_select :country, priority_countries: ['UA', 'RU', 'BY', 'GB']
.mb-2.row
.col-md-12
p Or select on map:
#map
.col-xl-3
.blur
.col-lg-12
= f.fields_for @picture do |i|
.row
#image-column.col-md-12
.row.mb-2
#fileInputColumn.col-md-12
= i.label '+', for: 'place_picture_image', id: 'place_picture_label'
= i.file_field :image, hidden: '', multiple: true
= i.hidden_field :image_cache
.row.button-row
.col-xl-4
.col-md-12.button-col
= f.submit 'Save', class: 'button'
В моделе:
scope :workspaces, -> { where(type: 'Workspace') }
scope :accommodations, -> { where(type: 'Accommodation') }
accepts_nested_attributes_for :address
accepts_nested_attributes_for :pictures
Ответы (1 шт):
Автор решения: Василиса
→ Ссылка
Вы же используете accepts_nested_attributes_for, форма построена с этим учётом, почему тогда в контроллере вы пытаетесь сущности по отдельности сохранить?
def new
@place = Place.new
@address = @place.build_address
end
def create
@place = current_user.places.build(place_params.except)
if @place.save
flash[:info] = 'Place created'
redirect_to places_path
else
render :new
end
end
= form_for(@place) do |f|
...
= f.fields_for @address do |a|
= f.fields_for :pictures do |i|
