您是否只能渲染部分特定动作的部分内容?

时间:2015-02-26 20:01:45

标签: ruby-on-rails-4 partials

我有一个项目部分,包含项目图像,项目价格和项目描述。在项目部分我也有一个用户头像的小缩略图,因为它是一个p2p市场。我希望这个头像在<%= render @items %>到处呈现,除了用户个人资料页面(用户控制器,显示动作),我希望它停止,因为它是多余的。

有没有办法实现这个目标?我尝试了很多东西,甚至没有接近。谢谢你的帮助。

这是项目部分代码:

<div class="thumbnail">
          <%= link_to item_path(item) do %>
          <%= image_tag(item.image.url(:thumb)) %>
          <% end %>
      </div>

      <div class="caption">
        <% if item.user.avatar.url %>
          <%= link_to item.user do %>
            <%= image_tag(item.user.avatar.url(:thumb), class: "user-avatar-partial pull-left") %>
          <% end %>
        <% else %> 
          <%= link_to item.user do %>
            <%= image_tag 'avatar-thumb.png', class: "user-avatar-partial pull-left" %>
          <% end %>
        <% end %>
          <span id="item-name-partial"> 
            <%= link_to item_path(item) do %>
              <%= item.name.truncate(20) %>
            <% end %>
          </span>
            <span class="pull-right" id="item-price-partial"> 
              <%= link_to item_path(item) do %>
                <%= number_to_currency item.price %>
              <% end %>
            </span>
      </div> 

1 个答案:

答案 0 :(得分:1)

我可以想到两个解决方案,但是在这两个解决方案中你都需要修改部分代码。

解决方案1:

在控制器操作中设置一个实例变量,并在部分中使用它。

class UsersController
  def show
    @hide_small_thumbnail = true
    # rest of your code
  end
end

然后在你的部分:

<% unless @hide_small_thumbnail %>
  <% #code for showing the thumbnail %>
<% end %>

除了该特定操作,实例变量的值将为nil,因此您的缩略图将按原样显示。

解决方案2:

在视图中指定控制器和操作名称。例如:

<% condition_one = (controller.controller_name == 'users') %>
<% condition_two = (controller.action_name == 'show') %>
<% unless condition_one && condition_two %>
  <% #code for showing the thumbnail %>
<% end %>

如果我必须选择,我会选择第一个。但是如果你使用后者,最好将条件移动到辅助方法并在视图中使用辅助方法而不是详细条件。