显示页面上的新/编辑操作::最佳实践问题

时间:2010-08-13 07:19:12

标签: ruby-on-rails forms

我正在设计一个仪表板页面,该页面总结了多个模型的数据,所有这些都在一个页面上。我还希望在该页面上包含用于创建新项目的表单。

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

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

使用嵌套方法,问题是现在我有一个新对象,当它遍历现有对象时会在我的show视图中抛出一个扳手。突然尝试渲染所有created_at次,因为新对象尚未保存。

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

我还没弄清楚错误处理是如何工作的。有时我的表单用fieldWitherrors类标记,有时它不会。我一直在尝试这两种方法,但我很难搞清楚。

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

1 个答案:

答案 0 :(得分:1)

如果你只需要新费用,那么后一种方法就是这样。请注意,这些基本相同:

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

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

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