我实际上正在制作一个具有User
,Category
,Book
和Comment
模型的电子商务Web应用程序。一切工作正常,但是当我尝试在其中一本书中发表评论时,出现400错误。我真的需要你帮我https://github.com/felixpro/Book-app这是我的资料库。
这是我的 CommentsController
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
book = Book.find(params[:comment][:book_id])
comment = book.comments.build(comment_params)
comment.user = current_user
if comment.save
redirect_to book_path(@book)
end
end
private
def comment_params
params.require(:comment).permit(:body)
end
end
这是部分评论视图,
<% if signed_in? %>
<div class="card bg-light new-comment">
<div class="card-body">
<p class="font-weight-bold">Deja tu comentario:</p>
<%= form_for @book.comments.build do |f| %>
<%= f.hidden_field :book_id, value: @book.id %>
<div class="form-group">
<%= f.text_area :body, rows: 4, class: "form-control" %>
</div>
<div class="text-right">
<%= f.submit "Comentar", class: "btn btn-primary" %>
</div>
<% end %>
</div>
</div>
<% else %>
<div class="card bg-light mt-5">
<div class="card-body">
<p class="card-text text-center lead"><%= link_to "Regístrate", new_user_registration_path %> o <%= link_to "Ingresa", new_user_session_path %> para comentar</p>
</div>
</div>
<% end %>
这是路线
Rails.application.routes.draw do
devise_for :users
root 'books#index'
resources :books
resources :comments, only: [:create]
end
错误提示
答案 0 :(得分:2)
您提到的错误与以下事实有关:在CommentController中的第9行和第14行,您有一个特殊的不可见字符(不间断空格)。这就是为什么您获得
NameError (undefined local variable or method `' for ...)
当您同时按下空格键(在MacOS上为cmd +空格键)的同时按下其他键时,通常会发生这种情况。删除这些空行,然后再次输入Enter键以清除字符。
然后另一个答案是正确的,您必须更新书的变量名称。
答案 1 :(得分:0)
当变量是本地@book
时,您已引用book
。在第6行的开头使用@
:
@book = Book.find(params[:comment][:book_id])