【问题标题】:Rails loses nested attribute children on form errorRails 在表单错误时丢失嵌套属性子项
【发布时间】:2012-04-25 15:34:55
【问题描述】:

我有一个必须存在的 has_one 关系:

has_one :child, :dependent => :destroy
validates_presence_of :child

在我的控制器中,我使用以下方法构建子对象:

@parent.build_child

当表单提交错误时,渲染最终会丢失已构建的子项。这会导致我的 fields_for 为空白,从而阻止用户输入所需的子字段。有什么想法吗?

【问题讨论】:

  • 您是否意识到build_ 方法没有将任何内容保存到数据库中?为什么你希望你的孩子通过重定向得救?再次呈现 edit 视图的常用方法,并显示有关错误的信息。注意:render,而不是 redirect_to。因此,您的视图将按照您的预期填充不完整的数据。
  • 我正在渲染而不是重定向。抱歉没说清楚,我在帖子里改了。
  • 所以你打电话给@parent.build_child 然后呢?你渲染一些视图来填充关于孩子的数据(那个窗台没有存储在数据库中)?填表的结果传给children_controller#create吧?这是您尝试通过@parent 访问child 的地方吗?
  • 对象不保存后再次渲染表单时,是不是又调用了这个? @parent.build_child
  • 我在控制器的“新”动作中调用它,所以我认为它会再次被调用。当我输出孩子时,我在第一次点击新页面时得到它,但在重新渲染后就为零。

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


【解决方案1】:

想通了:

before_filter :build_child, :only => [:new, :edit]

应该是:

before_filter :build_child, :only => [:new, :edit, :create, :update]

【讨论】:

    猜你喜欢
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多