【发布时间】:2025-11-24 19:10:01
【问题描述】:
一直在完成教程的最后一部分:https://www.youtube.com/watch?v=wOIQDO1yF80
使用 Rails 4.2.6
任务是为书评应用创建一个评论系统。刚刚完成以下
创建了评论模型并添加了关联
belongs_to :book
belongs_to :user
创建了一个嵌套路由
resources :books do
resources :reviews
end
创建了评论控制器 `类评论控制器
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
结束`
创建了部分表单_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>
在我的书 show.html.erb 文件中添加了指向我的评论“simple_form”<%= link_to "Add Review", new_book_review_path(@book) %> 的链接
添加了代码以在我的书 show.html.erb 文件中呈现与该书相关的所有评论
<%= render @book.reviews %>
问题是当我从评论 _form.html.erb 提交评论时, book_id 始终为空,因此它不会在图书页面上显示评论。这是我输入的最后一条记录的控制台输出。
Review Load (1.0ms) SELECTreviews.* FROMreviewsORDER BYreviews.idDESC 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 正在传递。
我认为问题是两个方面之一。
评论_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
任何帮助将不胜感激!
【问题讨论】:
-
你的模型中有
attr_accessor :book_id吗? -
我没有看到@book_id 来自哪里?
-
@Petr - review.rb 有
class Review < ActiveRecord::Base belongs_to :book belongs_to :user end -
@Marv-C - 我在 reviews_controller.rb 的开头做了一个`before_action :find_book`,它调用了一个具有以下属性的
private动作。 ` def find_book @book = Book.find(params[:book_id]) end` -
如果您只需要已经在参数中传递的 book_id,则无需查找 book。同样在您的 before_action 中,我看不到 @book_id 的设置位置
标签: ruby-on-rails nested associations simple-form