【问题标题】:new/edit actions on show page :: best practice question显示页面上的新/编辑操作 :: 最佳实践问题
【发布时间】:2010-08-13 07:19:12
【问题描述】:

我正在设计一个仪表板页面,它将来自多个模型的数据汇总在一个页面上。我还想在该页面上包含用于创建新项目的表单。

经过一些试验,我意识到我需要一些关于这种情况的最佳实践的建议......这是我正在尝试的 2 种方法

1) 使用嵌套的 field_fors...

form_for @job do |j|
  j.fields_for :invoice do |i|
    i.fields_for :charges do |c|
      c.text_field :amount

或 2)

form_for @job.invoice.charges.build do |c|
  c.text_field :amount

使用嵌套方法,问题是现在我有一个新对象,当它迭代现有对象时,它会在我的显示视图中抛出一个扳手。由于尚未保存新对象,因此突然尝试渲染所有 created_at 时间失败。

方法 2) 的问题是我将每个表单发布到它自己的控制器来处理它,但如果它没有验证,我需要渲染显示视图...这意味着我必须为每个控制器提供一个使用所有实例变量和方法等来呈现页面。

我还没有完全弄清楚错误处理是如何工作的。有时我的表单标有 fieldWitherrors 类,有时则没有。我一直在尝试这两种方法,但无法弄清楚。

任何人都可以就我应该去这里的方向提供建议吗?

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    如果您只需要新的充电,那么后一种方法就是方法。请注意,它们的作用基本相同:

    form_for @job.invoice.charges.build do |c|
    

    和

    @charge = Charge.new(:invoice_id => @job.invoice.id)
    form_for @charge do |c|
    

    使用第二种情况,在保存新费用之前,您不会将新费用与作业相关联,如果您将带有 @charge=... 的第一行移动到控制器,则可以在验证失败时重新呈现表单。

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2021-08-03
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多