我不确定我是否在这里采用了最好的方法,但是我有一个数据块,我想在搜索完成后显示这些数据,并且之前根本不存在。首先,没有什么可显示的,其次它引用的模型是 nil ,所以它会抛出异常。
我将此块放置在部分模板中,并将其添加到我的布局中的适当位置。有没有办法干净地有条件地渲染部分?有没有更好的方法来解决这个问题?
我不确定我是否在这里采用了最好的方法,但是我有一个数据块,我想在搜索完成后显示这些数据,并且之前根本不存在。首先,没有什么可显示的,其次它引用的模型是 nil ,所以它会抛出异常。
我将此块放置在部分模板中,并将其添加到我的布局中的适当位置。有没有办法干净地有条件地渲染部分?有没有更好的方法来解决这个问题?
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 %>
一种简单的方法是使用辅助方法。助手往往比将逻辑直接放在视图中更干净。
所以,你的观点可能是这样的:
<%= render_stuff_conditionally %>
并且您的助手将有一种方法来控制它:
def render_stuff_conditionally
if @contional_check
render :partial => 'stuff'
end
end
显然事物的命名更恰当
假设我正确地跟随你,你在视图级别执行此操作。
<% if !@my_search_data.nil? %>
<% render :partial => 'foo/bar' %>
<% end %>
希望有帮助。如果没有,也许发布您的代码示例。