最好的办法是避免这种否则逻辑部分? - Rails 3.1

时间:2011-11-18 20:47:20

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我有一个部分用于整个网站。我在部分中有一个图像,我希望链接到除一个特定控制器操作之外的所有页面上的某个页面。

1。如果没有2 if else设置,是否有办法放入以下href?...

<a href="#">
  <img src="#" />
</a>

我试图避免这样做:

<% if (current controller != xyz) %>
  <a href="#">
<% end %>
   <img src="#" />
<% if (current controller != xyz) %>
  </a>
<% end %>

2。如何实际检查哪个控制器称为此部分?

上面的代码只是伪代码。

PS。我知道这不是那么多重复,但我只是以这个简化的案例为例。好奇如果在Rails中有什么东西我不知道要避免这种情况。

2 个答案:

答案 0 :(得分:11)

这正是link_to_if的用途!

link_to_if(controller_name == 'xyz', image_tag('src'), 'http://target.com')

这将添加图像条件是否为真,并且仅在条件为真时将其包装在链接中。还有相关的link_to_unless,在您的情况下可能在语义上更合适。

编辑:我已更新上面的示例,使用正确的代码检查控制器名称。视图中有一个方法controller_name,它返回控制器名称的小写版本。它也在params哈希。

答案 1 :(得分:1)

归结为这个问题:“你想要复制什么”。

在您的问题中,您复制if测试。在一个反例(下面)中,我将复制img标签。

反例

<% if (current controller != xyz) %>
  <a href="#">
    <img src="#"/>
  </a>
<% end %>
<% if (current controller == xyz) %>
    <img src="#"/>
<% end %>

我的偏好是复制最不可能改变的东西,当我不知道哪个最不可能改变时,则默认为最短的复制量。

最短的目的是含糊不清。所写的图像标签似乎是最短的,但我怀疑if部分通常是最短的。