Ruby on rails 表单未能保存一个属性
我有一个表单正在保存除一个属性以外的所有属性:用户id(外键)持续显示为nil。这是一个创建新评论的表单,它位于我的impressions#show文件中,因此这可能是问题的一部分;但是其他属性(:name和:impression_id)似乎保存得很好 以下是表格:Ruby on rails 表单未能保存一个属性,ruby-on-rails,forms,foreign-keys,Ruby On Rails,Forms,Foreign Keys,我有一个表单正在保存除一个属性以外的所有属性:用户id(外键)持续显示为nil。这是一个创建新评论的表单,它位于我的impressions#show文件中,因此这可能是问题的一部分;但是其他属性(:name和:impression_id)似乎保存得很好 以下是表格: = form_for @comment do |f| = f.label 'Add Comment' %br = f.text_area :body, placeholder: 'Comment', cols: 5
= form_for @comment do |f|
= f.label 'Add Comment'
%br
= f.text_area :body, placeholder: 'Comment', cols: 50, rows: 3
%br
= f.hidden_field :impression_id, :value => @impression.id
= f.hidden_field :user_id, :value => current_user.id
%br
= f.submit "Save"
U控制器的相关部分为:
def show
@impression = Impression.find(params[:id])
@play = Play.find_by(id: @impression.production.play_id)
@production = Production.find_by(id: @impression.production_id)
@comments = Comment.where(impression_id: @impression.id)
@comment = Comment.new
end
在控制器的注释中,我有以下内容:
def new
@impression = Impression.find(params[:impression_id])
@comment = Comment.new(comment_params)
authorize @comment
end
def create
@comment = Comment.new(comment_params)
authorize @comment
if @comment.save
flash[:notice] = 'You have successfully added a comment.'
redirect_to :back
else
flash[:notice] = 'Please try again.'
render :new
end
end
private
def comment_params
params.require(:comment).permit(:body, :impression_id, :user_id)
end
如您所见,我正在尝试为:user_id分配当前_user.id的值,但它不接受。有人能看到我遗漏了什么吗
我已尝试将注释参数添加到我的impressions controller,但收到一条错误消息,该参数注释为空
谢谢 首先检查当前用户如果当前用户的值正常,则必须将用户id保存在评论表中。如果用户未登录,则当前用户为零。
确保您的用户已登录以回答您的问题 可能您的隐藏字段没有在注释子栏中发送
user\u id
。检查您的参数并查看。您的comment_params方法希望它位于comments子栏中
如何检查这些参数
在每次表单提交后查看rails控制台,或者
如果您使用的是rails 4.2,请在…中检查大约4分钟
或者
在你的档案里,把
group :development do
gem 'better_errors'
gem 'binding_of_caller'
end
捆绑(在终端中),重新启动rails服务器
然后在您的控制器代码中,在当前用户应该存在的行中,键入行raise“oops”
,运行代码,获取错误,然后转到您的控制台
这将为您提供一个带有控制台的错误页面,您可以在其中键入任何变量名(参数、当前用户等)并检查其值。这一切听起来都很棒!不幸的是,我在comments控制器中输入的行“raise”出现运行时错误,并且我没有看到错误页面或控制台。它们会在哪里?您应该有一个全新的漂亮的错误页面,但前提是您安装了更好的错误和绑定调用方,并且只有在您正在开发的情况下。然后您必须绑定并重新启动rails服务器。我会让这一切发生,然后给你一个截图。准备好。是的,我做了所有这些,但是这个新的错误页面在哪里?它应该替换我在预览中不断看到的当前错误页面吗?我修改了说明。看看新的URL,非常感谢!不幸的是,如果我在控制器中放入“raise”,我仍然会遇到运行时错误,所以目前这个解决方案似乎不适合我。无论如何,我已经确定我的当前用户已登录,并且确实有一个用户id;由于某种原因,它根本没有输入comment.user\u id。我搞不懂!我的用户已登录并具有id。我的当前用户具有值和id。它只是没有保存到:user\u id以获得新评论!