我正在开发一个视频游戏数据库,用户可以在其中制作游戏条目,评分和评论它们。
为了查看特定游戏,评论对象需要获得游戏的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 %>
但这会引发我的运行时错误: “将id称为nil,这将错误地为4 - 如果你真的想要id为nil,请使用object_id”
我不明白为什么。我的网址看起来像“localhost:3000 / games /:id / reivews / new”,并且在表单中定义,网址获取“@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中设置它?
我感谢任何帮助!
答案 0 :(得分:1)
我在这里找到两个问题,格式为
<%= form_for(@review, :url => game_reviews_path(@game)) do |f| %>
无需传递@game,只需要:url =&gt; game_reviews_path
检查您的佣金路线以找到确切的路径助手
第二,来自game_id隐藏字段标记
<%= hidden_field_tag("game_id", @game.id) %>
你的参数[:game_id] 会给出游戏的ID,但是在你的创建操作中你会这样做
@game = Game.find_by_id(params[:id])
答案 1 :(得分:0)
哦,是的,现在它正在发挥作用!非常感谢。 但我不得不承认控制器现在看起来有点扣除了
def create
@game = Game.find_by_id(params[:game_id])
@review = current_user.reviews.build(params[:review])
@review.game_id = @game.id
@review.user_id = current_user.id
if @review.save
flash[:success] = "review created!"
redirect_to root_url
else
render 'new'
end
end
def new
@review = Review.new(params[:review])
@game = Game.find_by_id(params[:game_id])
@review.game_id = @game.id
end
有什么可以被解雇的吗? 此外,现在每个评论在我的数据库中都有一个game_id,但我仍然遇到问题,评论只列在游戏上,其中id等于用户(作者)id。
示例:我正在尝试使用ID 4审核游戏,并且我是id = 2的用户...当发布时,评论不会显示在游戏编号4,而是在ID为2的游戏中即使在我的数据库中看到该评论获得了正确的game_id,但它与游戏无关,但用户ID是...
我认为我的游戏控制器中的“show”方法必须进行修改
目前看起来像这样
def show
#store_location
@game = Game.find(params[:id])
@review = @game.reviews.build
@feed_items = @game.feed.paginate(page: params[:page])
#@reviews = @user.reviews.paginate(page: params[:page])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @game }
end
end