我有一个保存除一个属性以外的所有表单。 :user_id(外键)持续出现为nil。这是一个用于创建新评论的表单,它位于我的印象#show文件中,因此可能是问题的一部分;但其他属性(:name和:impression_id)似乎保存得很好。
以下表格:
= 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"
impressions_controller的相关部分是:
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
在comments_controller中,我有以下内容:
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分配:current_user.id的值,但它并没有。谁能看到我失踪的东西?
我已经尝试将comments_params添加到我的展示控制器中,但是我收到一条错误消息,指出param注释为空。 。
谢谢!
答案 0 :(得分:0)
首先检查 current_user ,如果current_user的值正常,则必须在评论表中保存user_id。
答案 1 :(得分:0)
如果您的用户未登录,则current_user为nil。 确保您的用户已登录
答案 2 :(得分:0)
回答你的问题...
也许你的隐藏字段没有在评论subhash中发送user_id
。检查你的参数,看看。您的comment_params方法希望它位于注释subhash中。
你如何查看这些参数?
在每个表单提交后查看rails控制台,或者 如果您使用的是rails 4.2,请在...中查看https://gorails.com/episodes/rails-4-2-introduction大约4分钟,
...或
在你的gemfile中,放
group :development do
gem 'better_errors'
gem 'binding_of_caller'
end
捆绑(在您的终端中),重启您的rails服务器
然后在您的控制器代码中,在current_user应该存在的行中,键入行raise "oops"
,运行代码,获取错误,然后转到http://localhost:3000/__better_errors以查看您的控制台
这将为您提供一个带控制台的错误页面,您可以在其中键入任何变量名称(params,current_user等)并检查其值。