Rails:如何干掉部分

时间:2016-04-22 20:06:03

标签: ruby-on-rails ruby-on-rails-4 layout dry

喜欢干掉以下代码。创建了部分_user.html.erb,由用户视图通过

调用
  1. <%= render @users %>
  2. 群组视图

    1. <%= render partial: 'users/user', collection: @mailgroup.users, as: :user %>
    2. 部分_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.)。特别喜欢隐藏第二列中的check_box_tag

      我四处搜索,最后如何解决困惑:不同的布局?我怎么能用偏见来做呢?或者首先检查呼叫来自哪个控制器? (这对我来说听起来不太令人满意。)

      一般情况下:如何使用不同的列子集调用相同的部分而不维护该部分的不同副本?

1 个答案:

答案 0 :(得分: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