2009-08-18 115 views
0

新手入门,试图获​​得一对多关系并运行。我在模型和控制器中工作,但是我很难在视图中运行它。Ruby on Rails:一对多关系视图

<% 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 %> 

class Project < ActiveRecord::Base 
    has_many :non_labor_expenses 
end 

class NonLaborExpense < ActiveRecord::Base 
    belongs_to :project 
end 

我手动通过在控制器(编辑操作)加载@non_labor_expenses和可以拉动现有的数据在项目视图中像这样产生的所述non_labor_expense表的某些条目

我遇到的麻烦是将新的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

你能发布所有的表单代码吗? – 2009-08-18 17:52:30

+0

完整的表格代码:http://pastebin.com/m2b280b0f – easement 2009-08-18 18:00:11

回答

2

假设您只能为每个表单添加一个(与JS添加新的非劳务费用),只需在控制器中创建一个空的实例变量即可。

@new_non_labor_expense = NonLaborExpense.new 

在形式,打造出来使用:

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

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

在控制器中,您会看到一个名为“new_non_labor_expense”的参数,可以访问它,验证它,关联它并保存它。或者,如果这些步骤中的任何一个出现错误,您都可以反弹并通知用户。

如果您需要添加更多,只需创建一个数组,然后传入一个NLE数组。希望这是有道理的。

0

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

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

+0

我意识到这不是一个文本字段,但我不知道要使用什么。 我同意,但该网站的设计方式是非人工费用需要能够添加到项目编辑页面上。 – easement 2009-08-18 17:56:22

0

我想你需要的是嵌套窗体。 Here是一个简单的例子,它是如何与一对多关系做到的。它工作自Rails 2.3.2

+0

链接已死亡 – mack 2015-09-29 16:41:29