2016-04-22 21 views
0

就像幹掉下面的代碼一樣。經由Rails:如何幹起多次使用部分

經由

  1. <%= render @users %>

和由視圖視圖中創建的局部_user.html.erb,這被稱爲或者由用戶

  • <%= render partial: 'users/user', collection: @mailgroup.users, as: :user %>
  • 局部_user.html.erb是:

    <%= content_tag_for(:tr, user) do %> 
        <td><%= user.id %></td> 
        <td><%= check_box_tag "user_ids[]", user.id, true %></td> 
        <td><%= user.firstname %></td> 
        <td><%= user.lastname %></td> 
        <td><%= user.function %></td> 
        <td><%= user.company %></td> 
        <td><%= user.appendix %></td> 
        <td><%= user.city %></td> 
        <td> 
        <%= link_to button1 ...  %> 
        <%= link_to button2 ...  %> 
        <%= link_to button3 ...  %> 
        <%= link_to button4 ...  %>  
        </td> 
    <% end %> 
    

    現在我喜歡這個部分具有與所有列(呼叫1)呈現一次,並且還與列(呼叫2)的子集。特別喜歡在第二欄中隱藏。

    我搜索周圍,最後感到困惑如何解決:有不同的佈局?我將如何用偏分量來做到這一點?或者首先檢查來電者來自哪個控制器? (這聽起來並不令人滿意)。

    一般情況下:如何在不保留該部分的不同副本的情況下調用具有不同子列的相同部分?

    +0

    哦男人,我希望我有更多的時間,所以我可以深入到該。短版是你可能會考慮演示者模式。我正在開發一個項目,對於一組特別複雜的視圖,我已經將基本上全部**的邏輯從視圖中移到了普通的舊ruby對象中。現在我的生活好多了。這是你見過的最驚人的乾燥劑。查看Ryan Bates的RailsCast - 從頭開始​​發表演講。這是一個非常好的起點。如果你有興趣,我可以嘗試回來以獲得更完整的答案。 – jvillian

    回答

    1

    我不確定你可以使用局部佈局,我同意檢查控制器源代碼是一種代碼異味。我會考慮使用另一個本地來檢查是否要顯示可以在「調用」視圖中設置的字段,例如

    <%= render @users, locals: {show_buttons: false} %> 
    
    <%= render partial: 'users/user', collection: @mailgroup.users, as: :user, show_buttons: true %> 
    

    ,並在用戶部分

    <% if show_buttons %> 
        <td><%= check_box_tag "user_ids[]", user.id, true %></td> 
    <% end %> 
    

    使用您可以用一個輔助方法,還幹這個了

    <td><%= user.id %></td> 
    <%= check_box(user, show_buttons) 
    
    module UsersHelper 
    
        def check_box(user, show_buttons) 
        if show_buttons 
         content_tag(:td) do 
         content_tag(:option, "user_ids[]", value: user.id) 
         end 
        end 
        end 
    
    end 
    
    +0

    感謝margo,我不得不稍微調整你的解決方案:調用'<%= render @users,locals:{show_buttons:false}%>'不幸的是,在與本地調用時不起作用,需要完全寫調用爲'<%= render partial:'user',集合:@users,locals:{show_check:false}%>'(在本文中描述的答案:[http://stackoverflow.com/questions/16242121/rails- 4-passing-variable-to-partial] 然後,在助手中,我從'content_tag(:option ...)'更改爲'check_box_tag(...)' – Phipsen

    +0

    FWIW您可以使用partials作爲佈局,只需調用'渲染布局:'user''並傳遞一個塊而不是'render partial:'user''沒有塊。 – steel