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

Don*_*hes 38 ruby ruby-on-rails partial-views

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

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

Mik*_*cic 49

Ruby允许你做这样的好事:

<%= render :partial => "foo/bar" if @conditions %>
Run Code Online (Sandbox Code Playgroud)

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

<%= render(:partial => "foo/bar") if @conditions %>
Run Code Online (Sandbox Code Playgroud)

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

<% if @conditions %>
  <%= render :partial => "foo/bar" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

编辑:

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

<%= render :partial => "foo/bar" if !@conditions %>
#becomes
<%= render :partial => "foo/bar" unless @conditions %>
Run Code Online (Sandbox Code Playgroud)


Pet*_*ete 9

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

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

<%= render_stuff_conditionally %>
Run Code Online (Sandbox Code Playgroud)

你的助手会有一个方法来控制这个:

def render_stuff_conditionally
  if @contional_check
    render :partial => 'stuff'
  end
end
Run Code Online (Sandbox Code Playgroud)

显然,事情的名称更合适

  • 我认为值得考虑一下这种情况以及你使用或不使用帮助器实际获得的收益.如果您考虑填充到帮助程序中的代码将提高视图的可读性,那么对您来说可能是值得的.如果在视图中保留条件(或任何代码)会使代码更易读和可维护,那么也需要考虑.帮助者最终可以成为所有类型代码的全部内容,在这种情况下,您的视图代码可能很漂亮,但您只是"挤压了气球"(并且混乱并没有消失). (2认同)