Rails部分资源

时间:2014-04-28 18:23:07

标签: ruby-on-rails partials

我的应用程序中有一个名为Exercises的资源。我目前有一个名为_exercise.html.erb的部分用于渲染它们。我有一个外围的情况,我希望以一种完全不同的方式呈现它们。我是否可以为具有此其他格式的练习制作另一部分并且仍能使用<%= render @exercises%>?

如果不是最好的方法是什么?我应该在控制器中输出一个告诉部分使用哪个布局的变量,这将在一个文件中设置两个布局,如果要决定则设置一个。或者有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

在这种情况下,我想你有两个选择:

1)将条件代码放在_exercises.html.erb

例如。

<% if @exercise.meets_some_condition %>
 you see this stuff
<% else %>
 you see other stuff
<% end %>

这样,您仍然可以使用&lt;%= render @exercises%&gt;

2)否则,你的另一个选择就是有单独的部分并将它们渲染到外面。

例如

<% @exercises.each do |exercise| %>
  <% if exercise.meets_some_condition %>    
     <%= render "exercises/some_condition_exercise" %>
  <% else %>
     <%= render "exercises/exercise" %>
  <% end  %>
<% end %>

答案 1 :(得分:0)

这是渲染局部的最佳方法。您可以在代码中使用if else语句包装该部分。这是我的例子

使用名为_victim.html.erb的表单进行渲染

 <%= render :partial => "victim", :locals => {:f => f }%>

无表格渲染

<%= render :partial => "victim"%>

答案 2 :(得分:0)

如果您希望使用业务逻辑来确定何时显示@exercises集合的部分内容,则应使用练习模型中的to_partial_path方法来定义该部分。{p>请参阅此帖子中的#4:http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/

或者,如果这更像是与视图相关的决策(即一个视图将始终使用常规_exercises.html.erb而另一个视图将始终使用例如_alternate_exercises.html.erb),那么您可以这样指定:< / p>

<%= render partial: 'alternate_exercises', collection: @exercises, as: :exercise %>

这将为@execrises中的每个项目呈现_alternate_exercises.html.erb部分一次,通过名为exercise的local_assign将项目传递给部分。