#ruby-on-rails #nested-forms #has-one
#ruby-on-rails #вложенные формы #имеет один
Вопрос:
Я не могу понять, что я делаю неправильно. У меня есть две модели:
class Product < ActiveRecord::Base
has_one :review, dependent: :destroy
accepts_nested_attributes_for :review, allow_destroy: true
end
class Review < ActiveRecord::Base
belongs_to :product
end
У них есть отношение has_one. В базе данных есть столбец product_id в таблице отзывов.
Мой контроллер работает прямо на new (@product = Product.new), и действие редактирования ничего не имеет. Вот мои сильные параметры:
def product_params
params.require(:product).permit(:name, ..., review_attributes: [:id, :rating, :text, :author, :name] )
end
Моя форма выглядит следующим образом:
<%= form_for(@product, :html => {multipart: true, :class => "form-horizontal"}) do |f| %>
...
<%= f.fields_for :review do |ff| %>
<%= ff.hidden_field :author, :value => 'Yes' %>
<%= ff.label :rating, "Enter a Rating" %>
<%= ff.number_field :rating, class: "form-control input-md", min: 0, max: 5, step: 0.5 %>
<%= ff.label :name, "Title of Review" %>
<%= ff.text_field :name, class: "form-control input-md" %>
<%= ff.label :text, "Review Description" %>
<%= ff.text_area :text, class: "form-control" %>
<% end %>
<%= f.submit "Create Product", :class => 'btn btn-default btn-lg' %>
<% end %>
Я не могу понять, почему вложенная форма не отображается, когда у меня есть accepts_nested_attributes в модели, нужны ли мне эти accepts_nested_attributes или нет, и почему я получаю сообщение об ошибке «недопустимые параметры: проверка», когда у меня нет accepts_nested_attributes и отправляю форму. Любая помощь приветствуется.
Комментарии:
1. Возможно, вам нужно создать объект обзора в контроллере перед отображением представления… Все остальное, что у вас есть, выглядит для меня нормально, я думаю, вам не хватает связанного объекта при отображении формы… Я дал вам ответ, который вы должны принять, если это действительно проблема.
Ответ №1:
В контроллере попробуйте создать объект review в методе, который отображает эту форму…
def new
@product = Product.new
@product.build_review
end
Комментарии:
1. Это сработало.. Есть идеи о том, почему? Я думал, что accepts_nested_attributes позаботится о сборке?
2. нет, вам нужно создать объект, в котором вы принимаете атрибуты…
<%= f.fields_for :review do |ff| %>
эта строка… где вы говорите, вот поля дляreview
объекта… вы должны иметь этот объект в памяти … имеет смысл?3. ДА. Другая проблема, с которой я сталкиваюсь, связана с действием редактирования в контроллере. Информация для объекта проверки не заполняет поля формы. Есть какие-нибудь идеи? Верно, нет, мой контроллер просто (def edit end).