2009-08-18 188 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