【问题标题】:update_attributes not inserting all attributesupdate_attributes 未插入所有属性
【发布时间】:2013-03-12 21:44:05
【问题描述】:

我正在尝试使用 update_attributes 和 accept_nested_attributes_for 从父(位置)控制器更新一些子对象(days_events)。

params hash 中的一切看起来都不错,但是当我尝试使用 assign_attributes 或 update_attributes 时,实际日期没有得到更新。第一天的事件记录在数据库中成功创建,因为它应该使用 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"
}

【问题讨论】:

  • 您使用的是哪个数据库?检查日期格式,例如 MySQL 使用 YYYY-MM-DD 格式,如果您输入的格式无效,它将直接拒绝。
  • 你能发布关系和嵌套属性的模型代码吗?
  • 看看你的 attr_accessible
  • 当您尝试运行更新时会很高兴看到控制台日志
  • @sergelerator 做到了。它是一个 mysql 数据库,它不喜欢日期格式,它拒绝 2013 年 3 月 14 日的日期,但如果我尝试输入 2013 年 4 月 4 日,则交换日期和月份并不重要,而且一切正常。将其切换为答案并将其标记为已解决。谢谢大家!

标签: ruby-on-rails nested-attributes


【解决方案1】:

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

如果你想规范化日期格式,不管你得到什么作为输入,我建议在你的模型中添加一个before_validation 钩子并在那里做。检查this question 上的答案以获取建议,它不处理日期(它显示如何格式化价格属性),但它应该让您了解您需要做什么。

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

希望对你有帮助:)

【讨论】:

  • 谢谢!我尝试将 before_validation 添加到 days_event 模型中,但出现 nilClass 错误。有什么建议吗?
  • 只有当日期格式无法正常工作时,我才会收到 nilClass 错误。 2013 年 3 月 15 日而不是 2013 年 4 月 4 日..
  • 您在访问日期属性时是否遇到此错误?我刚刚运行了一些测试,看起来,在 Date 属性上设置无效的日期格式会导致模型拒绝该值。这必须在控制器中处理......(哦,不):) 我在想你的ApplicationController 中的before_filter 可以格式化你的日期。但是,如果您可以控制客户端代码,请尝试在那里设置正确的格式,我不太喜欢将这种噪音添加到您的 ApplicationController
  • 那是我收到错误的时候。我可以访问客户端代码,但我希望用户以 MM/DD/YYYY 格式查看日期。您能否为 before_filter 选项指出正确的方向?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
相关资源
最近更新 更多