41

我不确定我是否在这里采用了最好的方法,但是我有一个数据块,我想在搜索完成后显示这些数据,并且之前根本不存在。首先,没有什么可显示的,其次它引用的模型是 nil ,所以它会抛出异常。

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

4

3 回答 3

55

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 %>
于 2010-03-04T03:08:53.843 回答
8

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

所以,你的观点可能是这样的:

<%= render_stuff_conditionally %>

并且您的助手将有一种方法来控制它:

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

显然事物的命名更恰当

于 2010-03-04T02:24:44.943 回答
2

假设我正确地跟随你,你在视图级别执行此操作。

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

希望有帮助。如果没有,也许发布您的代码示例。

于 2010-03-04T02:25:22.887 回答