Simple_form:参数未传递

时间:2017-07-10 23:54:47

标签: ruby-on-rails simple-form

我正在尝试为网站实施评论功能。到目前为止,我能够将我要评论的电影的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]实际上是我想要的,我尝试将其添加为占位符,并且它具有正确的值。

这可能是一个愚蠢的错误,但我真的被卡住了......

感谢您的时间。

2 个答案:

答案 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],只是为了让它更干净?