【问题标题】:Cant define a hash in the params, using field_for and rails 5无法在参数中定义哈希,使用 field_for 和 rails 5
【发布时间】:2017-04-30 22:41:00
【问题描述】:

我正在尝试向 Rails 范围提交 2 个值。我需要半径(由范围标签提交)和邮政编码。

我在表单中有一个 fields_for 标记(在 haml 中):

      =f.fields_for :postcode do |postcode_fields|
        =postcode_fields.text_field(:postcode_d,placeholder: "HQ Location")
        =postcode_fields.range_field(:max_range, in: 1..100)

范围:

scope :postcode, lambda {|input|
return nil  if input.blank?

terms = Scotland.near(input[0], input[1])

where(
terms.map { |term|
  " charity_id = ?"
}.join(' OR '),
*terms.map {|e|(e.charity_id)}.flatten
)
}

控制器:

    def scotland_params
      params.require(:scotland).permit!(:charity_number, :charity_name, :registered_date, :known_as, :charity_status, postcode: [:postcode_d,:max_range] , :constitutional_form)
    end

问题似乎出在我对邮政编码的定义中。我尝试了多种方法来定义邮政编码哈希,但都没有奏效。对于我在这里使用的错误是

SyntaxError 

    (/Users/peterkentish/Documents/UNIVERSITY/SecondYear/Semester2/SoftwareHut/project/app/controllers/scotlands_controller.rb:46: syntax error, unexpected =>
..., :charity_status, postcode: =>[:postcode_d, :max_range] , :...
...                               ^
/Users/peterkentish/Documents/UNIVERSITY/SecondYear/Semester2/SoftwareHut/project/app/controllers/scotlands_controller.rb:46: syntax error, unexpected ',', expecting keyword_end
...: =>[:postcode_d, :max_range] , :constitutional_form, :previ...
...                               ^):

TL;DR 如何在 Rails 5 中传递嵌套属性?

编辑:

参数哈希(我认为):

@scotlands = Scotland.all
@filterrific = initialize_filterrific(Scotland, params[:filterrific]) or return
 @scotlands = @filterrific.find.page(params[:scotlands])
@scotlands = @scotlands.paginate(page: params[:page], per_page: 20)

respond_to do |format|
format.html
format.js

【问题讨论】:

    标签: ruby-on-rails ruby nested-attributes filterrific


    【解决方案1】:

    真正的问题是,为什么在编写强参数并将整个定义塞进一行时,每个人都会完全发疯。

    不可读的代码是你得到错误的原因。

    def scotland_params
      params.require(:scotland).permit(
        :charity_number, :charity_name, :registered_date, 
        :known_as, :charity_status, :constitutional_form,
        postcode_attributes: [:postcode_d, :max_range]
      )
    end
    

    【讨论】:

    • 嗯,试试postcode: [:postcode_d, :max_range],而不是postcode_attributes
    • 不幸的是,同样的问题,我被困在这个问题上很久了,再次感谢。有些地方说应该是:postcode => [:postcode_d, :max_range],但这也不行
    • 您可以将参数哈希添加到问题中吗?
    • 已添加,我想这就是您的意思?
    • 否 - 查看您正在运行的控制台中的日志或输出rails server - 您应该会看到传入参数的哈希值。
    【解决方案2】:

    我相信您可能希望将:postcode => [:postcode_d, :max_range] 包装在{...} 中,或者将:postcode => [:postcode_d, :max_range] 移动到permit! 参数列表的末尾。

    SyntaxError 是 Ruby,在解释您的代码时,由于没有明确的 {...},所以在 :postcode 哈希之后什么都不会发生。

    【讨论】:

      【解决方案3】:

      如果有人遇到这种情况,则 gem filterrific 中存在错误:

      https://github.com/jhund/filterrific/pull/116

      感谢帮助的人

      【讨论】:

        猜你喜欢
        • 2016-04-29
        • 2017-08-08
        • 2017-09-12
        • 1970-01-01
        • 2017-10-29
        • 1970-01-01
        • 2013-07-27
        • 1970-01-01
        • 2016-02-11
        相关资源
        最近更新 更多