我有一個典型的博客應用程序,用戶可以在帖子#show模板中發佈評論。發表評論從另一個控制器的顯示操作
resources :posts do
resources :comments
end
# posts_controller.rb
def show
@post = Post.find(params[:id])
@comment = @post.comments.build
end
# comments_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.build(params[:comment])
@comment.author = current_user
if @comment.save
redirect_to @post
else
render 'posts/show'
end
end
在視圖中,我首先檢查是否有評論,輸出它們,然後我顯示一個新的評論表單。
/ posts/show.html.slim
- if @post.comments.any?
@post.comments.each do |comment|
p = comment.author.name
...
= form_for [@post, @comment]
如果註釋驗證失敗,我會得到'無方法名稱爲nil類'錯誤。我認爲這是因爲@post.commets.any?
返回true,因爲該評論是通過後關聯構建的 - 即使評論未通過驗證並且未保存。
你如何解決這個問題?
試試@ post.comments.blank? – Ross