我正在尝试为网站实施评论功能。到目前为止,我能够将我要评论的电影的movie_id
传递到我创建评论的页面(这是默认的脚手架视图)。之后,我尝试将movie_id
传递给create
的{{1}}方法,但它不会通过。我尝试将其类(comments_controller
)分配给params[:movie_id].class
属性,并显示comment
。
我的代码:
NilClass
comments_controller.rb
def create
@comment = Comment.new
@comment.comment = params[:comment].values.first
@comment.user_id = current_user.id
@comment.movie_id = params[:movie_id]
#...
end
(_form.html.erb
页面呈现的那个)
new
<%= simple_form_for(@comment) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :comment, label: false, placeholder: 'Your opinion'%>
<%= f.hidden_field :movie_id, input_html: { value: params[:movie_id] } %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
文件中的params[:movie_id]
实际上是我想要的,我尝试将其添加为占位符,并且它具有正确的值。
这可能是一个愚蠢的错误,但我真的被卡住了......
感谢您的时间。
答案 0 :(得分:1)
你的html中有错误。隐藏字段应该对隐藏字段使用正确的rails语法,或者使用简单的表单语法。
Rails语法:
<%= f.hidden_field :movie_id, value: params[:movie_id] %>
简单的表单语法:
<%= f.input :movie_id, as: :hidden, input_html: { value: params[:movie_id] } %>
在控制器中:
@comment.movie_id = params[:comment][:movie_id]
顺便说一下,使用强参数的好形式如下
@comment.movie_id = comment_params[:movie_id]
private
def comment_params
params.require(:comment).permit(:movie_id, ...(and others..)
end
答案 1 :(得分:0)
$str_json = file_get_contents('php://input');
这应该有用吗?
我仍然这样做,因为在控制器中你可能<%= f.hidden_field :movie_id, params[:movie_id] %>
在控制器中使用form_for,@comment = Comment.new
然后在表单中使用@comment.movie_id = params[:movie_id]
,只是为了让它更干净?