有条件地在视图中显示信息的更好方法?

时间:2009-11-08 20:50:02

标签: ruby-on-rails ruby erb

我发现自己经常在HTML HEAD和其他地方编写这样的代码:

<% if @canonical_url %>
  <link rel="canonical" href="<%= @canonical_url %>"/>
<% end %>

然后我在控制器中设置变量,如果合适的话。

有没有办法在一行上编写等效文件,或者可能采用不同的方式组织代码?

4 个答案:

答案 0 :(得分:2)

很抱歉双重回答,我只会发布一个网址。

或者,您可以使用content_for in your views解决问题,以便在布局中显示此内容。

答案 1 :(得分:1)

好的,我想出了这个解决方案。在模板中:

<%= show_if('<link rel="canonical" href="$1"/>', @canonical_url) %>

然后是辅助方法:

#
# Return the template text if the variable has a value.
#
def show_if(template, variable)
  if variable
    template.gsub('$1', variable)
  else
    ''
  end
end

答案 2 :(得分:1)

我需要更多的上下文来确定你要做的是什么。鉴于您提供的信息,我建议您查看canonical-url plugin for Rails

答案 3 :(得分:0)

def if_value(value, &block)
  if value
    concat(capture(value, &block))
  end
end

<% if_value(@canonical_url) do |value| %>
  <link rel="canonical" href="<%= value %>"/>
<% end %>