【发布时间】:2016-09-22 19:32:11
【问题描述】:
为了自学,我正在 Rails 5 上构建一个简单的评论者博客文章。它是一个视频游戏评论者,用户可以在其中撰写关于他们玩过的最近游戏的评论。用户还可以在评论中添加评论。
我想通过嵌套表单在我的游戏模型上实现自定义属性编写器。当用户第一次列出游戏时,我还希望他们能够当场为该游戏撰写评论。
Game.rb
class Game < ApplicationRecord
has_many :reviews, dependent: :destroy
has_many :users, through: :reviews
validates :title, presence: true
def reviews_attributes=(reviews_attributes)
reviews_attributes.values.each do |review_attributes|
self.reviews.build(review_attributes)
end
end
end
games/new.html.erb
<h1>Enter a new Game</h1>
<%= form_for @game do |f| %>
<%= render 'shared/error_messages', object: @game %>
<%= render 'new_form', f: f %>
<br><br>
Review:
<br>
<%= f.fields_for :reviews, @game.reviews.build do |r| %>
<%= render 'reviews/form', f: r %>
<%= f.submit "Add Game and/or Review!" %>
<% end %>
<% end %>
评论/表格部分
<%= f.label :title %>
<%= f.text_field :title %>
<br>
<%= f.label :content %>
<%= f.text_area :content %>
<br>
<%= f.label :score %>
<%= f.text_field :score %>
<%= f.hidden_field :user_id, :value => current_user.id %>
Games_Controller.rb
def create
@game = Game.new(game_params)
if @game.save
redirect_to @game
else
render :new
end
end
private
def game_params
params.require(:game).permit(:title, :platform, reviews_attributes: [:rating, :content, :user_id])
end
由于某种原因,每当我尝试通过我的嵌套表单创建与游戏关联的新评论时,我都会收到无效的评论。我的 error_messages 部分呈现错误消息:“1 个错误禁止保存此内容:评论无效”。
我猜关于评论表单或参数哈希中的数据的某些内容没有被传输。我不确定为什么。我什至尝试使用内置的 Rails 助手建立关联:accepts_nested_attributes_for,但我仍然遇到同样的错误。
为了清楚起见,这是我的仓库的链接:https://github.com/jchu4483/Rails-Assessment-
谢谢,感谢您提供任何帮助或建议。
【问题讨论】:
-
尝试在你的强参数中添加
:id到reviews_attributes:reviews_attributes: [:id, :rating, :content, :user_id] -
我刚试过,它给了我同样的错误。
标签: ruby-on-rails ruby nested-forms