当我保存我的大型表格时,我很难理解发生了什么 - 没有任何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>]
答案 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
一直是我的问题。 :(