Ошибка при создании скрытых полей для вложенных объектов - PullRequest
0 голосов
/ 23 августа 2011

Я использую рельсы 2.3.5.У меня есть модель блога, и у блога много комментариев.Это действие моего контроллера блогов show

def show
  @blog = Blog.find(params[:id])
  @comment = Comment.new
end

Я бы отобразил блог и в конце мог бы создать комментарий.Поэтому я добавляю это в blogs / show.html.erb.

<% form_remote_for  @comment do |f| %>
      <%= f.label :content %>
      <%= f.text_area :content, :rows => 6 %>
      <%= f.hidden_field :blog => @blog %>
      <%= f.submit %>
  <% end %>    

Но я получаю следующую ошибку при запуске этого NoMethodError в блогах # show

Отображение приложения / views / blogs /show.html.erb, где поднята строка # 270:

undefined method `blog#<Blog:0xb677d8d0>' for #<Comment:0xb67762b0>

Извлеченный источник (около строки # 270):

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

Comment модель должна иметь belongs_to :blog

Blog модель должна иметь has_many :comments

Инициализировать комментарий в контроллере следующим образом:

@blog.comments.new

Вид должен быть таким:

<%= f.hidden_field :blog_id %>
1 голос
/ 23 августа 2011

Вы должны скрыть идентификатор блога, а не объект блога.

<%= f.hidden_field :blog_id%>
0 голосов
/ 23 августа 2011

Проблема в вашей f.hidden_field линии. Первый параметр должен быть именем атрибута @comment, который вы хотите в поле, но в вашем коде это хеш.

Я бы предложил изменить действие show для установки @comment = @blog.comments.build и изменить представление на f.hidden_field :blog_id.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...