【问题标题】:ActionController::ParameterMissing in UsersController#create用户控制器#create 中的 ActionController::ParameterMissing
【发布时间】:2014-11-04 14:43:41
【问题描述】:

我的错误页面告诉我“参数丢失或值为空:用户”并引用了我的 user_params 私有方法和我的创建操作作为罪魁祸首。它还表明我传入的所有参数都被创建帖子接收了。

简称控制器:

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    @user.save
    redirect_to @user
  end

  private

  def set_user
    @user = User.find(params[:id])
  end

  def user_params
    params.require(:user).permit(:first_name, :last_name, :email)
  end

我的 form_tag 启动创建帖子:

= form_tag @user do
  .form-group
    = label_tag :first_name, nil, class: 'col-md-2'
    = text_field_tag :first_name, nil, class: 'col-md-3'
    %br
  .form-group
    = label_tag :last_name, nil, class: 'col-md-2'
    = text_field_tag :last_name, nil, class: 'col-md-3'
    %br
  .form-group
    = label_tag :email, nil, class: 'col-md-2'
    = email_field_tag :email, nil, class: 'col-md-3'
    %br
  .actions.form-group
    = submit_tag 'Submit', class: 'btn btn-primary col-md-offset-2'

【问题讨论】:

  • 虽然@BroiSatse 给出了解决方案,但原因是您收到的参数没有嵌套在:user 哈希中,即params[:user] 是空的。因为在 html 中,您输入的名称不像 user[email] 等...

标签: ruby-on-rails forms controller


【解决方案1】:

变化:

= form_tag @user do

= form_for @user do |f|

然后是所有label_tagf.labeltext_field_tagf.text_fieldemail_field_tagf.email_field,最后是submit_tagf.submit。删除所有的 nil,一切都应该可以工作。

【讨论】:

  • 错误不再出现,但参数现在丢失了。有点讽刺 :) 是否有理由使用 form_for 而不是 form_tag?
  • form_for 将对象与字段绑定,并为字段提供更好的命名,因此参数似乎在提交时被分组。使用表单标签,所有参数都作为单独的参数发送(不存在包装键)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2019-08-30
  • 1970-01-01
  • 2012-09-27
相关资源
最近更新 更多