update_attributes不插入所有属性

时间:2013-03-12 21:44:05

标签: ruby-on-rails nested-attributes

我正在尝试使用update_attributes和accepts_nested_attributes_for来更新父节点(位置)控制器中的某些子对象(days_events)。

params hash中的一切看起来都很好但是当我尝试使用assign_attributes或update_attributes时,实际日期不会更新。第一个days_event记录在数据库中成功创建,应该与event_id和location_id一起创建,但是start_date和end_date字段是空的。

日期字段也没有任何模型限制。

这是我位置(父)控制器中的代码:

def update
    logger.debug('PARAMS HASH********'+params.to_s)

    @total_forms=params[:total_forms].to_i
    @current_form=params[:current_form].to_i

    @location = Location.find(params[:id])       

    @location.update_attributes(params[:location])
  end

这是我的参数哈希:

{
"utf8"=>"Γ£ô", 
"_method"=>"put", 
"authenticity_token"=>"Mz2GzRmqxrygy01d2LdkE6ZZY+fJK1PSlVhFKlVUme8=", 
"location"=>{
    days_events_attributes"
=>{
    "0"=>{
        "start_date"=>"03/14/2013", 
        "end_date"=>"03/14/2013", 
        "_destroy"=>"false", 
        "event_id"=>"588"
        }, "
    1"=>{"
        start_date"=>"", 
        "end_date"=>"", 
        "_destroy"=>"1",
        "event_id"=>"588"
        },
    "2"=>{
        "start_date"=>"",
        "end_date"=>"", 
        "_destroy"=>"1", 
        "event_id"=>"588"
        }
    }
 }, 
 "total_forms"=>"2", 
 "current_form"=>"0", 
 "commit"=>"Add Date s for Next Location", 
 "action"=>"update", 
 "controller"=>"locations", 
 "id"=>"871"
}

1 个答案:

答案 0 :(得分:2)

检查日期格式,MySQL例如使用YYYY-MM-DD格式,如果输入的格式无效,它将拒绝它。

如果您想要标准化日期格式而不管输入的内容是什么,我建议您在模型中添加before_validation钩子并在那里进行。检查this question上的答案是否有建议,它不处理日期(它显示如何格式化价格属性),但它应该让您知道您需要做什么。

如果您需要帮助格式化日期,请在此处发表评论,我会尽快与您联系。

希望有所帮助:)