2013-03-13 42 views
0

我需要將來自日誌和journal_entries的字段放入表中的一行,並且能夠在同一視圖中添加和顯示多個數據輸入行。 (即一個行表,並使用帶有accept_nested_attributes的link_to_add_fields擴展表中的行)。rails如何做f.parent.text_field:name

必須有某種f.parent.text_field或f.object.parent.text_field

我想

class Lease < ActiveRecord::Base 
    has_many :journals, :order => [:dated, :id] #, :conditions => "journals.lease_id = id" 
    has_many :journal_entries, :through => :journals 
    accepts_nested_attributes_for :journal_entries , :allow_destroy => true 
    accepts_nested_attributes_for :journals , :allow_destroy => true  
end 

class Journal < ActiveRecord::Base 
    belongs_to :lease, :conditions => :lease_id != nil 
    has_many :journal_entries 
    accepts_nested_attributes_for :journal_entries , :allow_destroy => true 
end 

class JournalEntry < ActiveRecord::Base 
    belongs_to :journal 
end 

我使用Rails 3.2.12像做以下

<table> 
#in a :pm namespace 
<%= form_for [:pm, @lease] do |f| %> 
    <%= f.fields_for :journal_entries do |journal_entries| %> 
    <%= render "journal_entry_fields" , f: journal_entries %> 
    <% end %> 
    <%= link_to_add_fields "+ Add transactions", f, :journal_entries %> 
<% end %> 
</table> 

_journal_entry_fields.html.erb

<fieldset> 
    <tr> 
    ## HERE IS WHAT I'M LOOKING FOR <<<<<<<<<<<!!>>>>>>>>>>>>> 
    <td><%= f.parent.text_field :dated %></td> 
    <td><%= f.parent.text_field :account_name %></td> 
    <td><%= f.text_field :credit %></td> 
    <td><%= f.text_field :notes %></td>   
    </tr> 
</fieldset> 

我的模型和紅寶石1.9.3

我試圖看看這是否是比問題面臨的更好的解決方案:rails link_to_add_fields not adding fields with has_many :through (with nested form inside)

我做了一個不同的線程,因爲我認爲它是如此巨大的不同。

感謝, 菲爾

+0

你能詳細闡述一下你想達到的目標嗎?爲什麼要添加'<%= f.fields_for:journal_entries do | g | '_journal_entry_fields.html.erb'中的'%>'? – 2013-03-13 19:02:12

+0

'dated'字段的用途是什麼?你爲什麼試圖從關聯表中分配它?如果兩個不同的'journal_entries'對於他們父母的''''''有兩個不同的值會發生什麼?這對我來說沒什麼意義...... – HargrimmTheBleak 2013-03-13 19:11:45

+0

修正了這個問題,它並不意味着在那裏:)好抓Manoj。我試圖讓它將來自journal模型和journal_entry模型的輸入放在同一個空間中。我知道,如果在有多個孩子的情況下嘗試更改父母,可能會導致父母感到困惑,但如果父母有多個孩子時禁用該父母,則可以避免這種情況(允許它僅編輯第一個孩子或最後一個孩子的父母...這就是說,是否有可能做某種類型的f.parent.text_field:屬性? – nevieandphil 2013-03-13 19:12:52

回答

0

按我理解你的使用,如果你想在租賃形式單一,以創建期刊和其條目。所以,你可以我們fields_for對他們倆如下的:

<table> 
    #in a :pm namespace 
    <%= form_for [:pm, @lease] do |f| %> 
    <%= f.fields_for :journals do |journal| %> 
     <%= render "journal_entry_fields" , f: journal %> 
    <% end %> 
    <%= link_to_add_fields "+ Add transactions", f, :journals %> 
<% end %> 
</table> 

_journal_entry_fields.html.erb

<fieldset> 
    <tr> 
    <td><%= f.text_field :dated %></td> 
    <td><%= f.text_field :account_name %></td> 
    <%= f.fields_for :journal_entries do |journal_entry| %> 
     <td><%= journal_entry.text_field :credit %></td> 
     <td><%= journal_entry.text_field :notes %></td> 
    <% end %> 
    </tr> 
</fieldset> 

雖然你需要初始化的日記帳分錄的每一個新的記錄動態添加時間。因爲我不在我的電腦上,所以我現在無法幫助您。

+0

這不是我希望得到的解決方案,但可能是最好的殺死那裏的貓。如果用戶嘗試更改一個父記錄並且有多個子項,則f.parent可能會導致衝突。這裏唯一的問題是如果有很多日記條目,它會跑到右邊(製作一張醜陋的表格)。如果有更簡單的方法爲journal_entries製作多行,那會更好。我的解決方案與此類似,不過我使用div(而不是浮動)而不是簡單的表格。謝謝你Manoj! – nevieandphil 2013-03-13 20:15:13

+0

是的,我實際上是在建議你一樣。順便說一句,不客氣! :) – 2013-03-13 20:19:21

+0

現在我只需要弄清楚每次添加記錄時如何初始化該日記帳分錄。我以爲它會從控制器完成'@lease = Lease.new; journal = @ lease.journals.build; journal.journal_entries.build' – nevieandphil 2013-03-13 20:23:27

0

試試這個:http://railscasts.com/episodes/196-nested-model-form-revised

的RailsCasts模型的關係類似於模型關係,儘管可能需要更改HTML。

RailsCasts型號:Survey > Question > Answer

你的模型:Lease > Journal > JournalEntry

+0

是的,我專門用了很多我有的情節,但對於這種情況它不起作用。我有其他模型可以工作,但這種情況下魔法無效。關於f.parent的任何想法? – nevieandphil 2013-03-13 19:05:05

+0

我想不出辦法做父母的事情。我會嘗試將模型2嵌入深處。 – Sam 2013-03-13 19:31:17

+0

是的,這可能是[當然]最合適的方式,它似乎只是語言必須支持我想要做的事情(即使它有點不恰當)。謝謝山姆 – nevieandphil 2013-03-13 19:42:42