Ruby on Rails:有条件地显示部分

时间:2010-03-04 02:20:08

标签: ruby-on-rails ruby partial-views

我不确定我是否在这里做最好的方法,但是我有一个数据块,我希望在搜索完成之后显示并且之前根本不存在。首先,没有什么可以显示,第二个它引用的模型是nil所以它会引发异常。

我将此块放在部分模板中,并在我的布局中添加了适当的位置。有条件干净地渲染局部的方法吗?有没有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:47)

Ruby允许你做这样的好事:

<%= render :partial => "foo/bar" if @conditions %>

为了使这更容易阅读和理解,它可以写成:

<%= render(:partial => "foo/bar") if @conditions %>

render是一个函数,你传递一个哈希值,告诉它要呈现哪个部分。 Ruby允许你把东西放在一行上(这通常使它们更具可读性和简洁性,特别是在视图中),因此if @conditions部分只是一个常规的if语句。它也可以像:

<% if @conditions %>
  <%= render :partial => "foo/bar" %>
<% end %>

修改

Ruby还允许您使用unless关键字代替if。这使代码更具可读性,并使您不必进行负面比较。

<%= render :partial => "foo/bar" if !@conditions %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>

答案 1 :(得分:9)

一种简单的方法是使用辅助方法。助手往往比在视图中直接放置逻辑更清洁。

因此,您的观点可能类似于:

<%= render_stuff_conditionally %>

并且您的助手会有一个方法来控制它:

def render_stuff_conditionally
  if @contional_check
    render :partial => 'stuff'
  end
end

显然事情的名称更合适

答案 2 :(得分:2)

假设我正在关注你,你可以在视图级别执行此操作。

<% if !@my_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>

希望有所帮助。如果没有,也许发布一个代码示例。