Rails 带有条件参数的辅助方法

Rails helper methods with conditional parameters

有时在我的 Rails 视图中,我有一些重复的代码,因为我必须根据某些条件设置 Rails 辅助方法的参数。喜欢:

<% if something %>
  <%= link_to "Target", @target, class: "target-a" %>
<% else %>
  <%= link_to "Target", @target, class: "target-b" %>
<% end %>

或另一个例子:

<% if tooltip == false %>
  <%= image_tag picture.url(size), class: "img-responsive #{css_class}" %>
<% else %>
  <%= image_tag picture.url(size), class: "img-responsive #{css_class}", data: { toggle: "tooltip", placement: "bottom" }, title: "#{picture.name}" %>
<% end %>

有没有一种更优雅的方式来写这个(不用重复整个助手)?

谢谢

您可以隔离选项散列中的差异并将差异合并到共享的基本选项散列中:

<%
  link_options = 
    if something
      {}
    else
      { data: { toggle: "tooltip", placement: "bottom" }, title: "#{picture.name}" }
    end
%>
<%= image_tag picture.url(size), 
              link_options.merge(class: "img-responsive #{css_class}") %>

或者,更好的是,您可以使用您自己的自定义辅助方法来做同样的事情。使用辅助方法是更可取的,因为这样你就有了一个可以测试、重用、命名(以自我记录的方式)等的方法。