我的应用程序中有一个名为Exercises的资源。我目前有一个名为_exercise.html.erb的部分用于渲染它们。我有一个外围的情况,我希望以一种完全不同的方式呈现它们。我是否可以为具有此其他格式的练习制作另一部分并且仍能使用<%= render @exercises%>?
如果不是最好的方法是什么?我应该在控制器中输出一个告诉部分使用哪个布局的变量,这将在一个文件中设置两个布局,如果要决定则设置一个。或者有更好的方法吗?
答案 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将项目传递给部分。