我正在设计一个仪表板页面,该页面总结了多个模型的数据,所有这些都在一个页面上。我还希望在该页面上包含用于创建新项目的表单。
经过一些实验,我意识到我需要一些关于这种情况的最佳实践的建议......以下是我尝试的两种方法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类标记,有时它不会。我一直在尝试这两种方法,但我很难搞清楚。
任何人都可以就我应该去的方向提出建议吗?
答案 0 :(得分:1)
如果你只需要新费用,那么后一种方法就是这样。请注意,这些基本相同:
form_for @job.invoice.charges.build do |c|
和
@charge = Charge.new(:invoice_id => @job.invoice.id)
form_for @charge do |c|
使用第二种情况,在保存之前不要将新费用与作业连接,如果将第一行@charge = ...移动到控制器,则可以在验证失败时重新呈现表单。