2011-06-07 28 views
0

我是Rails開發的新手,所以請耐心等待。我創建了一個視圖,它有幾個看起來非常相似的字段。這只是乞求以某種方式進行重構,但我一直無法弄清楚。請參閱下面的代碼示例:重構Rails視圖

<%= form_for(@tapelog) do |f| %> 
    <div class="container"> 
    <div class="field span-16"> 
     <div class="span-8 labelRight"> 
     <%= f.label :client %> 
     </div> 
     <div class="span-8 last"> 
     <%= f.collection_select :client_id, Client.find(:all), :id, :name, 
           { :prompt => "Select a Client..." }, 
           { :class => "automatixSelect" } %> 
     </div> 
    </div> 
    <div class="field span-16"> 
     <div class="span-8 labelRight"> 
     <%= f.label :employer %> 
     </div> 
     <div class="span-8 last"> 
     <%= f.collection_select :employer_id, Employer.find(:all), :id, :name, 
           { :prompt => "Select an Employer..." }, 
           { :class => "automatixSelect" } %> 
     </div> 
    </div> 
    .... 
<% end %> 

有大約7個這樣的領域。我試圖把它們全部分成部分,這樣我可以減少這個頁面上的混亂,但是由於'f'沒有被定義,所以出錯。關於如何在這裏減少一些混亂的想法?對Ruby重構的其他任何提示也將受到歡迎。

感謝, - A.

+1

這就像一個完整的重構?首先,你可以把所有這些div拿出來。適當的表單結構*通常*採用字段集的形式和無序(或有序)的表單元素列表。看看這裏:https://github.com/justinfrench/formtastic – corroded 2011-06-07 01:21:39

+0

想探索一些更多。它現在有點過分了,但是我已經爲它獲得了超過6天的Rails編碼經驗的書籤。 – Adnan 2011-06-07 01:31:46

+0

沒有概率,如果你尋找可能對你有幫助的插件,它是最好的選擇。它爲您節省了一大筆的編碼和工作:)。我還看到你正在使用網格框架(960或藍圖?),你也可以使用指南針gem(compass-style.org),所以你不必將這些類添加到你的標記。這一切都在CSS應該是! :) – corroded 2011-06-07 02:40:45

回答

3

如果你想在隨後的泛音使用「F」,它作爲一個參數傳遞

<%= render :partial => :some_partial, :locals => { :f => f } %> 
1

我做的第一件事就是重新命名爲了清楚起見,「f」局部變量「形成」。然後,代碼提取到的部分是合理的:

<div class="field span-16"> 
    <div class="span-8 labelRight"> 
    <%= form.label :employer %> 
    </div> 
    <div class="span-8 last"> 
    <%= form.collection_select :employer_id, Employer.find(:all), :id, :name, 
           { :prompt => "Select an Employer..." }, 
           { :class => "automatixSelect" } %> 
    </div> 
</div> 

它看起來對我來說,這是一個belongs_to的關係,所以我可能會創建一個部分叫做「belongs_to的」,並使其像:

<%= render :belongs_to, :parent => :employer, :form => form %> 

這個想法是我們將有一個本地命名的「父母」,我們可以在部分中改變。請注意,我使用了簡寫的部分語法。它是一樣的:

<%= render :partial => :belongs_to, :locals => { :parent => :employer, :form => form } %> 

<div class="field span-16"> 
    <div class="span-8 labelRight"> 
    <%= form.label parent %> 
    </div> 
    <div class="span-8 last"> 
    <%= form.collection_select :"#{parent}_id", parent.to_s.capitalize.constantize.find(:all), :id, :name, 
           { :prompt => "Select an #{parent.to_s.capitalize}..." }, 
           { :class => "automatixSelect" } %> 
    </div> 
</div> 
+0

這很好。我可以用它來爲我所有的「下拉選擇」類型字段設置一個部分。太好了! – Adnan 2011-06-08 11:25:02