【问题标题】:NoMethodError (undefined method `permit' for #<Array:0x007f51c020bd18>NoMethodError(#<Array:0x007f51c020bd18> 的未定义方法“允许”
【发布时间】:2016-10-04 14:58:15
【问题描述】:

我收到此错误并使用 Rails 5。

NoMethodError(未定义方法permit' for #<Array:0x007f51cf4dc948> app/controllers/traumas_controller.rb:99:intrauma_params' app/controllers/traumas_controller.rb:25:in `create_multiple'

控制器参数如下。

于 2016 年 10 月 4 日开始为 127.0.0.1 发布“/traumas/create_multiple” 20:09:36 +0530 TraumasController#create_multiple 作为 JS 处理
参数:{"utf8"=>"✓", "fields"=>[{"contusions"=>"1", "burns"=>"", "at_scene"=>"现场", "emergency_detail_id"=>"96", "trauma_region"=>"Head-Back"}], "commit"=>"Submit"}

我正在尝试在控制器中创建如下记录:

  def create_multiple
    trauma_params
    params[:fields].each do |values|
       u = Trauma.create(values)
    end
  end

def trauma_params
        params.require(:fields).permit(:fields => [])
end

请帮我解决这个问题。

提前致谢。

基兰。

【问题讨论】:

  • 我是否理解正确,您打算接受任何数组,包括 :fields 参数的空数组?我相信 .permit 不是执行输入验证的正确方法。如果删除 .permit 语句会发生什么?

标签: ruby-on-rails-5 nomethoderror


【解决方案1】:

参数:

{"fields"=>[{"contusions"=>"1", "burns"=>"", "at_scene"=>"At Scene", "emergency_detail_id"=>"96", "trauma_region"=>"Head-Back"}]}

对象的安全列表数组,需要“字段”属性:

def trauma_params
  params.permit(fields: [
   :contusions,
   :burns,
   :at_scene,
   :emergency_detail_id,
   :trauma_region
  ])
  .require(:fields)
end

来源:https://edgeguides.rubyonrails.org/action_controller_overview.html#nested-parameters

【讨论】:

    【解决方案2】:

    我通过参考这个 (https://github.com/rails/strong_parameters/issues/140) github 问题解决了它。

    编辑

    对于如下参数(在数组中):

    参数:{"fields"=>[{"contusions"=>"1", "burns"=>"", "at_scene"=>"现场", "emergency_detail_id"=>"96", "trauma_region"=>"Head-Back"}], "commit"=>"Submit"}

    我们可以做到:

    def trauma_params
      params.require(:fields).map do |p|
        ActionController::Parameters.new(p).permit(
          :contusions,
          :burns,
          :at_scene,
          :emergency_detail_id,
          :trauma_region
        )
      end
    end
    

    【讨论】:

    • 我收到NoMethodError (undefined method 'with_indifferent_access' for #&lt;ActionController::Parameters:0x007f996827fac0&gt;):' How do I solve this?
    • @JosephN。 Rails 5 现在返回ActionController::Parameters,因此不需要该调用。第三行现在看起来像:p.permit(
    • @craineum 现在返回以下错误ArgumentError (When assigning attributes, you must pass a hash as an argument.):
    • 这是代码params.require(:newParams).map do |p| p.permit( :value, :tag, :position ) end newParams 是一个数组
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 2018-10-18
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    相关资源
    最近更新 更多