Rails 4.2.5,simple_form,hstore,嵌套表单 - Hstore Hash不会保存

时间:2017-03-14 12:32:39

标签: ruby-on-rails postgresql simple-form nested-forms

当我保存我的大型表格时,我很难理解发生了什么 - 没有任何Hstore参数保存到数据库中。有人能指出我认为是明显的错误吗? (我已经快速修剪了很多输出,以尽可能简洁。

没有控制台输出,并且它没有抱怨未经许可的参数或任何东西。 equipment模型上的discipline字段是hstore列。

鉴于我强大的参数设置:

params.require(:profile).permit(
  :id,
  :user_id,
  :gender,
  :dob,
  ..snip..
  disciplines_attributes: [
    :id,
    :profile_id,
    :discipline_type,
    :distance_in_meters_per_week,
    ..snip..
    :equipment => [
      :time_trial_bike,
      :road_bike,
      :turbo_trainer,
      :watt_bike
    ]
  ]

我的参数:

Parameters: {"utf8"=>"✓", "authenticity_token"=>"XX", "profile"=> 
{"gender"=>"male", "dob(1i)"=>"1927", "dob(2i)"=>"3", "dob(3i)"=>"14", 
"disciplines_attributes"=>{"0"=>
{"discipline_type"=>"swimming", "distance_in_meters_per_week"=>"", 
"equipment"=>
    {
      "pull_buoy"=>"true", 
      "paddles"=>"false", 
      "wetsuit"=>"true", 
      "fins"=>"false", 
      "tempo_trainer"=>"false"
    }}}, 
"commit"=>"Create Profile"}

然后我从控制器检查了结果profile_params:

{"gender"=>"male", "dob(1i)"=>"1927", "dob(2i)"=>"3", "dob(3i)"=>"14", "height_in_meters"=>"", 
"disciplines_attributes"=>{"0"=>{"discipline_type"=>"swimming", "distance_in_meters_per_week"=>"", 
"equipment"=>{
    "pull_buoy"=>"true", 
    "paddles"=>"false", 
    "wetsuit"=>"true", 
    "fins"=>"false", 
    "tempo_trainer"=>"false"}}
}

有人可以帮助我理解为什么设备哈希没有提交到数据库吗?

Discipline id: 148, profile_id: 50, discipline_type: "running", distance_in_meters_per_week: "", sessions_per_week: nil, time_per_session_in_minutes: nil, created_at: "2017-03-14 12:02:15", updated_at: "2017-03-14 12:02:15", equipment: nil>]

1 个答案:

答案 0 :(得分:0)

编写自己的问题是什么,这总是会让你最终明白,只是也许,你在其他地方搞砸了?

像重载Disciplines::initialize方法一样,将设备hstore作为新记录时“种子”。但是在每个实例上都这样做,而不仅仅是新记录。

所以回答我自己的问题。上面的确有效,如果我不想直接检查数据库,而不是依赖控制台,我可能已经意识到:

after_initialize :setup_equipment

def initialize(search, options = {})
  self.options = options
  super
end

private

def setup_equipment
  self.equipment = self.options
end

一直是我的问题。 :(