正在完成此处的教程的最后一部分:https://www.youtube.com/watch?v=wOIQDO1yF80
使用Rails 4.2.6
任务是为图书评论应用创建评论系统。刚刚完成以下
创建了评论模型并添加了关联
belongs_to :book
belongs_to :user
创建了一个嵌套路由
resources :books do
resources :reviews
end
创建了审核控制器 `class ReviewsController< ApplicationController的 before_action:find_book
def new
@review = Review.new
end
def create
@review = Review.new(review_params)
@review.book_id = @book_id
@review.user_id = current_user.id
if @review.save
redirect_to book_path(@book)
else
render 'new'
end
end
private
def review_params
params.require(:review).permit(:rating, :comment)
end
def find_book
@book = Book.find(params[:book_id])
end
end`
创建了部分表单_form.html.erb
<%= simple_form_for([@book, @book.reviews.build]) do |f| %>
<%= f.input :rating %>
<%= f.input :comment %>
<%= f.button :submit %>
<% end %>
创建_partial视图以显示评论
<p><%= review.rating %></p>
<p><%= review.comment %></p>
在我的图书<%= link_to "Add Review", new_book_review_path(@book) %>
文件
show.html.erb
的链接
添加了代码,用于在我的图书show.html.erb
文件中呈现与图书相关的所有评论
<%= render @book.reviews %>
问题是当我从评论_form.html.erb提交评论时,book_id始终为null,因此它不会在书页上显示评论。这是我输入的最后一条记录的控制台输出。
Review Load (1.0ms) SELECT
的评价.* FROM
的评价ORDER BY
的评价.
ID为DESC LIMIT 1
=> #<Review id: 13, rating: 4, comment: "Testing", created_at: "2016-06-18 02:10:23", updated_at: "2016-06-18 02:10:23", user_id: 1, book_id: nil>
irb(main):007:0>
我没有收到任何错误消息。我可以手动将book_id输入数据库中的记录并正确显示,但问题是当我提交表单时传递了book_id inst。
我认为问题是两个方面之一。
评论_form.html.erb
行<%= simple_form_for([@book, @book.reviews.build]) do |f| %>
注意:当我提交评论时,user_id正确存储,看起来它们是在同一个地方定义的(在评论控制器内)
def create
@review = Review.new(review_params)
@review.book_id = @book_id
@review.user_id = current_user.id
if @review.save
redirect_to book_path(@book)
else
render 'new'
end
end
任何帮助将不胜感激!
答案 0 :(得分:1)
我明白了。愚蠢的错误,但让我永远想弄清楚。
在我有@review.book_id = @book_id
的创建操作中,应该是@review.book_id = @book.id
感谢费拉斯的帮助。