0

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

4

4 回答 4

2

假设每个表单只能添加一个(相对于 JS 添加 [n] 新的非人工费用),只需在控制器中创建一个空实例变量。

@new_non_labor_expense = NonLaborExpense.new

在表单中,使用以下方法构建它:

<%= f.text_field :new_non_labor_expense, :amount %>

或者任何适当的成员 var 和字段类型。

在控制器中,您将获得一个名为“new_non_labor_expense”的参数,并且可以访问它、验证它、关联它并保存它。或者,如果这些步骤中的任何一个错误,您可以退回并通知用户。

如果您需要添加更多,只需将它们组成一个数组,以便传入一个 NLE 数组。希望这是有道理的。

于 2009-08-18T18:31:11.960 回答
1

另一个选择是fields_for - 这对我来说似乎很好用。查看Railscasts 73-75

于 2009-08-18T19:13:02.890 回答
0

non_labor_expenses不是文本字段,这可能是您最大的问题。

更好的方法可能是创建一个新的non_labor_expense,并在其创建中有一个下拉选择框来选择项目的 id(或名称,通过 id)。

于 2009-08-18T17:46:12.220 回答
0

我认为您需要的是嵌套表格。是一个简单的例子,如何使用一对多的关系来做到这一点。它从 Rails 2.3.2 开始工作

于 2009-08-18T19:02:39.243 回答