Rails 4 Has_one вложенная форма - Ошибка Неразрешенный параметр

Я не могу понять, что я делаю неправильно. У меня есть две модели:

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 в таблице отзывов.

Мой контроллер работает прямо с новым (@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 и отправить форма. Любая помощь приветствуется.


person Joe D    schedule 30.09.2016    source источник
comment
Возможно, вам нужно создать объект обзора в контроллере до того, как представление отобразится... Все остальное, что у вас есть, выглядит хорошо для меня, я думаю, что вам не хватает связанного объекта при отображении формы... Я сделал для вас ответ принять, если это действительно проблема.   -  person Eric    schedule 01.10.2016


Ответы (1)


В контроллере попробуйте создать объект обзора в методе, который рендерит эту форму...

def new
  @product = Product.new
  @product.build_review
end
person Eric    schedule 01.10.2016
comment
Это сработало .. Есть идеи, почему? Я думал, что accepts_nested_attributes позаботится о сборке? - person Joe D; 01.10.2016
comment
нет, вам нужно построить объект, в котором вы принимаете атрибуты... <%= f.fields_for :review do |ff| %> эта строка... где вы говорите, вот поля для объекта review... вы должны построить этот объект в памяти.. , есть смысл? - person Eric; 01.10.2016
comment
да. Другая проблема, с которой я сталкиваюсь, связана с действием редактирования в контроллере. Информация для объекта обзора не заполняет поля формы. Есть идеи? Правильно нет, мой контроллер просто (окончание редактирования определения). - person Joe D; 02.10.2016