我正在开发一个视频游戏数据库,用户可以在其中制作游戏条目、评分和评论。
为了评论某个游戏,评论对象需要获取该游戏的 id,以便与该特定游戏相关联。我定义了一个嵌套资源
resources :games do
resources :reviews
end
在游戏的显示视图中,我有一个链接,它指向评论表单
link_to "Kritik verfassen", new_game_review_path(@game)
表单本身是这样定义的
<%= form_for(@review, :url => game_reviews_path(@game)) do |f| %>
<div class="field">
<%= f.text_area :content, placeholder: "Compose new review..." %>
</div>
<%= hidden_field_tag("game_id", @game.id) %>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
但这会给我抛出运行时错误:“为 nil 调用 id,这会错误地为 4——如果你真的想要 nil 的 id,请使用 object_id”
我不明白为什么。我的 url 看起来像这样“localhost:3000/games/:id/reivews/new”,并且按照表单中的定义,该 url 获取“@game”属性。
这是我的评论控制器
def create
@game = Game.find_by_id(params[:id])
@review = current_user.reviews.build(params[:review])
@review.game_id = @game.id
@review.user_id = current_user.id
#@review = @game.reviews.build(params[:review])
#@review.game_id = Game.find_by_id(params[:game_id])
if @review.save
flash[:success] = "review created!"
redirect_to @review
else
render 'new'
end
end
def new
@review = Review.new(params[:review])
end
我的模型中的关联设置正确,但为什么我的评论表没有收到相应的游戏 ID?它仅在我关闭“hidden_field_tag”但我需要游戏 ID 时才有效。然后在创建评论时也会发生错误,因为控制器中传递了 game.id。为什么 game.id 为零,我如何在这个嵌套的 url 中设置它?
我很感激任何帮助!