2012-12-01 41 views
1

我有什麼看起來像一個簡單的查詢。我需要創建一個視圖來接受基於單個模型的多個記錄。在我的情況下,模型是Project,它有1個外鍵(人)和2個時間域,角色。我需要創建一個視圖(表單)來插入5個角色。Rails 3 - 創建視圖以插入多個記錄

<%= form_for(@project) do |f| %> 
<% 5.times do |index|%> 
    <div class="field"> 
    <%= f.label :position %><br /> 
    <%= f.text_field "fields[#{index}][stime]" %> 
    </div> 

<% end %> 
<div class="actions"> 
    <%= f.submit %> 
</div> 
<% end %> 

我得到一個錯誤信息:未定義的方法`場[0] [STIME]」

我不認爲嵌套模型railscasts正是我需要的。

我該如何去創造這個?

編輯:項目模型代碼如下:

class Project < ActiveRecord::Base 
    belongs_to :person 
    attr_accessible :role, :stime 
end 

新方法的Projects_Controller代碼如下:

def new 
@project = Project.new 
end 
+0

你能發佈完整的表單嗎?聽起來像一個'Project'需要三個屬性,person_id,time和role,但是stime只有一個輸入。不清楚這裏發生了什麼。發佈你的'Project'模型也會有所幫助。 – Substantial

+0

我已經添加了項目模型。我創建了一個視圖,目前只顯示一個字段。我想這不應該是一個問題。 – andyd

+0

請張貼您的控制器代碼。 –

回答

1

我看你打算做一些1 TO-很多關係(Product has_many :roles)。

以下是一些建議。

首先,看看accepts_nested_attributes_for的方法。您需要將其添加到您的模型中才能執行批量創建。

其次,fields_for是您需要設計嵌套窗體。

我給你海量創建一個簡單的Product has_many :line_items箱子一些例子:

<%= form_for @product do |f| %> 
    <%= f.fields_for :line_items, [LineItem.new]*5 do |li_fields| %> 
     <%= li_fields.text_field :quantity %> 
     <%= li_fields.text_field :price %> 
     <br> 
    <% end %> 
    <%= f.submit "Create line items" %> 
<% end %> 

所有你需要的是寫在你控制器是這樣的:

@product.update_attributes params[:product] 

和5 line_items將立即創建。

不要忘了白名單association_attributes(請參閱您的日誌params看到它)。但我認爲,如果你得到大規模分配的錯誤,你會做它無論如何:)

我希望它可以幫助。

+0

我認爲這也是這種情況,但似乎沒有關聯,也沒有角色類,也沒有角色表。 'role'只是'Project'的一個字符串屬性,按照設計我想。正常化'角色'在這裏是有道理的,但我想知道OP是否有意地這樣做了。 – Substantial

+0

謝謝jdoe。我認爲,而不是角色,我們可以用人來代替它。所以一個項目有很多人。所以嵌套表單是要走的路? – andyd

+0

@andyd是的,嵌套窗體可以處理這個。 – jdoe

相關問題