2011-03-22 85 views
3

活動記錄呼叫我有偏的形式,看起來像這樣:Rails的替代方案,包括針對

<%= form_for(@pool) do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :tournament %><br /> 
    <%= f.collection_select :tournament_id, Tournament.active, :id, :name, :prompt => true %> 
    </div> 

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

這似乎是一個代碼味道,因爲觀點不應該負責知道如何獲取數據爲<select>標記。讓控制器分配一個實例變量的替代方法是有問題的,因爲我必須根據是否呈現此表單來在幾個動作中複製該代碼。

在ASP.NET MVC中,我只是將該字段拖到局部視圖中,並通過調用RenderAction來顯示它,這將評估一個通用控制器操作。然而,在Rails render :action => '/view'似乎只允許渲染完整的視圖。我對Rails很新,所以我不確定最佳實踐。

+0

我不太明白你在問什麼。我不知道它是否有幫助,但可以在部分渲染中調用'render:partial =>'file''。 – edmz 2011-03-22 17:49:28

+0

也許輔助方法會很有用。 – 2011-03-22 17:54:37

回答

2

你可以按照coder_tim的建議做一個輔助方法,但在我看來,仍然會在視圖中留下數據訪問。

控制器是這個正確的地方,如果你擔心重複,建立一個的before_filter只作用於需要這個集合的操作:

before_filter :get_active_tournaments, :only => [:new, :edit] 

例如。

希望這會有所幫助。

+0

真棒,我曾想過一個輔助方法,但是通過一個其他方法調用的輔助方法看起來像是過度工程,只是爲了創建一個抽象。這正是我期望的那種面向導軌的解決方案。 – Vadim 2011-03-22 18:27:44

+0

:),不客氣。 – 2011-03-22 18:28:45

0

我喜歡那個代碼的氣味:)對極端主義的簡單。較少的文件=較少的方法擔心=較乾淨的代碼。

但是,有時候在應用程序中使用了多次下拉式選項,這比調用作用域稍微複雜一些。在那種情況下,我寫了一個幫手。

+0

我認爲這絕對是我的一部分,因爲它很簡單,可能也很好。作爲開發人員,我們往往過度工作,因爲我們已經被教導說抽象是好的做法。 – Vadim 2011-03-22 18:45:03