我不确定我是否在这里做最好的方法,但是我有一个数据块,我希望在搜索完成之后显示并且之前根本不存在。首先,没有什么可以显示,第二个它引用的模型是nil所以它会引发异常。
我将此块放在部分模板中,并在我的布局中添加了适当的位置。有条件干净地渲染局部的方法吗?有没有更好的方法来解决这个问题?
答案 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 %>
希望有所帮助。如果没有,也许发布一个代码示例。