2014-05-05 19 views
0

我試圖避免同一個資源的Admin表單和常規用戶表單之間的代碼重複。Rails - 同一表單的不同form_for語句

我希望能夠使用一種形式兩種,通過執行類似:

<% if current_user.admin? %> 
    <%= form_for([:admin,@post], :html => {class: "form"}) do |f| %> 
<% else %> 
    <%= form_for @post, html: { class: 'form' } do |f| %> 
<% end %> 

則包括只有管理員應通過,如果在窗體的身體語句中所看到的字段。

這種方法不起作用,我認爲是因爲<%end%>正在結束表格。

有沒有辦法做到這一點?這種方法甚至有意義嗎?

謝謝!

+0

我不認爲這會工作 – Babar

回答

4

嘗試移動代碼,以你的助手可能會有幫助:

#YourHelper.rb 
def form_for_admin(condition, &block) 
    if condition 
     form_for [:admin, @post], :html => {class: "form"}, &block 
    else 
     form_for @post, html: { class: 'form' }, &block 
    end 
end 

及用途:

<%= form_for_admin current_user.admin? do |f| %> 
+0

該解決方案很好工作。不過,我最終意識到,雖然我想避免重複,但我不希望管理員看到與應用程序前端用戶不同的表單。我最終只是將重複的部分抽象成partials,並傳入局部f變量,如:<%= render partial:'form_fields',locals:{f:f}%> – jmichaels