ActiveRecord :: AssociationTypeMismatch в CommentsController # создать - PullRequest
0 голосов
/ 22 ноября 2010

Я продолжаю получать сообщение Ожидается, получена строковая ошибка.Если кто-то может помочь мне заранее спасибо.

<% form_for :comment, :url=>{:controller=>"comments", :action=>"create"} do |f|%>
<p>
<%= f.label :body, "New Comment"%><br />
<%= f.text_area :body %>
<%= f.hidden_field :post, :value=>@post.id %>
</p>
<p><%= f.submit "Add Comment"%></p>
<% end%>

def create
   @comment = Comment.create(params[:comment])
   if @comment.save
      redirect_to(:controller=>"posts" ,:action=>'index')
   else
      redirect_to(:controller=>"posts" ,:action=>'show', :id=>"post.id")
   end
end

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Ваш второй редирект должен быть:

redirect_to(:controller=>"posts" ,:action=>'show', :id=> @comment.post.id)

Хотя, глядя на это, вы определенно могли бы использовать некоторые более совершенные шаблоны для очистки. Если вы используете RESTful маршруты, я бы изменил ваше действие создания на:

def create
  @post = params[:id]
  @comment = @post.comments.build(params[:comment])

  if @comment.save
    redirect_to posts_url
  else
    redirect_to post_url(@post)
  end
end

Это позволит вам удалить скрытое поле в форме, поскольку оно должно передаваться через URL в качестве идентификатора.

0 голосов
/ 22 ноября 2010

Прежде всего, не следует ли изменить post.id на @post.id (и, возможно, создать объект записи)?

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