【问题标题】:Rails Application Controller missing param that is not missingRails 应用程序控制器缺少不缺少的参数
【发布时间】:2014-02-10 15:16:29
【问题描述】:

我有一个类似的问题,例如this guy

我的控制器有这个功能:

    def user_params
       params.require(:login)
       params.require(:password).permit(:first_name, :last_name, :login, :password,:position)
    end

我得到了错误

 `param not found: login`

这是发布请求。

 {"utf8"=>"✓",
 "authenticity_token"=>"H+Z0dGaheQPjl3T+0zcGHw3NFYkQ1HLccG1ETcQFbsk=",
 "user"=>{"first_name"=>"Max",
 "last_name"=>"Werner",
 "position"=>"Business Dev Analyst",
 "login"=>"login",
 "password"=>"[FILTERED]"},
 "commit"=>"Create User"}

问题是我的表中有一个名为登录的列。我在命令行中通过mysql进行了检查。我手动创建了一个条目,索引功能登录没有问题...相同的哈希:登录

这里为什么会报错?

【问题讨论】:

    标签: mysql ruby ruby-on-rails-4


    【解决方案1】:

    您要求login 的参数位于参数哈希的“顶层”。在您的发布请求中,loginpassword 参数嵌套在 user 参数中。

    我建议这样做:

    params.require(:user).permit(:login, :password)

    如果您绝对想检查以确保包含 loginpassword,您可以这样做:

    def user_params
      required_params = params.require(:user)
    
      required_params.require(:login)
      required_params.require(:password)
    
      required_params.permit(<permitted_params>)
    end
    

    可以将方法调用链接在一起,但请记住require 返回给定键处的参数:

    1.9.3p484 :001 > params = { :name => { :first => "Chris" } }
     => {:name=>{:first=>"Chris"}} 
    
    1.9.3p484 :002 > ActionController::Parameters.new(params).require(:name).require(:first)
     => "Chris"
    

    所以,如果你想使用链接,你的方法应该是这样的:

    def user_params
      params.require(:user)
    
      params.require(:user).require(:login)
      params.require(:user).require(:password)
    
      params.require(:user).permit(<permitted_params>)
    end
    

    我的意见是前者更干净,但无论哪种方式都会得到你想要的结果。

    The documentation on parameters其实真的很好,举了很多例子。我强烈建议您检查一下。

    【讨论】:

    • 谢谢,只要我为每个必需的有单独的行,然后为 required_pa​​rams.permit(:.... :.... :....) 有一行,它就可以工作。我虽然你可以用菊花链在铁轨上。为什么我需要在这里将它们分开?
    • 可以这样做,关于require 声明...我会更新我的答案并解释。
    猜你喜欢
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2021-06-18
    • 1970-01-01
    • 2019-11-12
    相关资源
    最近更新 更多