对rails很新,并尝试建立一对多关系并运行。我让它在模型和控制器中工作,但我无法在视图中启动并运行。
class Project < ActiveRecord::Base
has_many :non_labor_expenses
end
class NonLaborExpense < ActiveRecord::Base
belongs_to :project
end
我通过加载控制器中的@non_labor_expenses(编辑操作)在non_labor_expense表中手动创建了一些条目,并且可以在项目视图中提取现有数据,如下所示:
<% unless @non_labor_expenses.nil? %>
<% count = 1 %>
<% for expense in @non_labor_expenses %>
<li>
<div class="label"><%= f.label :expense , "Expense" + count.to_s %></div>
<%= '$' + expense.amount.to_s + ' - ' + expense.description.to_s %>
</li>
<% count = count +1 %>
<% end %>
我遇到的麻烦是在项目中添加一个新的non_labor_expense条目。我应该能够管理后端处理它,但我甚至无法将字段显示在表单中。
这就是我现在所处的位置:
<li class="editable">
<div class="label"><%= f.label :non_labor_expenses %></div>
<%= f.text_field :non_labor_expenses %>
</li>
我知道上面的代码看起来不像这样,但理想情况下,表单字段会是这样的:
Expense Amount [text input]
Expense Description [text input]
我的完整表单代码可在此处找到:http://pastebin.com/m2b280b0f
答案 0 :(得分:2)
假设您只能为每个表单添加一个(与JS相比,添加[n]新的非人工费用),只需在控制器中创建一个空的实例变量。
@new_non_labor_expense = NonLaborExpense.new
在表单中,使用:
构建它<%= f.text_field :new_non_labor_expense, :amount %>
或者任何适当的成员var和字段类型。
在控制器中,您将获得一个名为“new_non_labor_expense”的参数,可以访问它,验证它,关联它并保存它。或者,如果这些步骤中的任何一个错误,您可以退回并通知用户。
如果您需要添加更多内容,只需创建一个数组,以便传入一个NLE数组。希望这是有道理的。
答案 1 :(得分:1)
另一种选择是fields_for - 这对我来说似乎很合适。查看Railscasts 73 - 75。
答案 2 :(得分:0)
non_labor_expenses
不是文字字段,这可能是您最大的问题。
更好的方法是创建一个新的non_labor_expense
,并在其创建中有一个下拉选择框,用于选择项目的id(或名称,通过id)。
答案 3 :(得分:0)
我认为你需要的是嵌套表格。 Here是一个简单的例子,说明如何使用一对多关系。它自Rails 2.3.2起作用