在Rails待办事项应用程序的索引文件(来自Railscast的代码)中,它列出了分配给任务控制器中的实例变量的不完整和完整的任务。注意它如何调用渲染@incomplete_tasks并渲染@complete_tasks,而partial只调用
_task.html.erb
看来这个部分用于渲染不完整和完整的任务。 Rails是否能够忽略实例变量的前半部分(即@incomplete和@complete)来使用一个部分来渲染两者?
控制器
def index
if current_user
@incomplete_tasks = current_user.tasks.where(complete: false)
@complete_tasks = current_user.tasks.where(complete: true)
end
end
索引
<% if @incomplete_tasks.empty? && @complete_tasks.empty? %>
<p>Currently no tasks. Add one above.</p>
<% else %>
<h2>Incomplete Tasks</h2>
<div class="tasks" id="incomplete_tasks">
<%= render @incomplete_tasks %>
</div>
<h2>Complete Tasks</h2>
<div class="tasks" id="complete_tasks">
<%= render @complete_tasks %>
</div>
<% end %>
_task.html.erb
<%= form_for task, remote: true do |f| %>
<%= f.check_box :complete %>
<%= f.label :complete, task.name %>
<%= link_to "(remove)", task, method: :delete, data: {confirm: "Are you sure?"}, remote: true %>
<% end %>
答案 0 :(得分:2)
因此rails会查看模型对象,以确定在使用这种语法时要使用哪个部分。在这两种情况下,实例变量都包含任务,因此rails知道使用_task partial。
答案 1 :(得分:0)
复制@ryanb的答案,请在此处查看:Rails: Rendering Models?
如果您将模型直接传递给render,它将尝试为其渲染部分模型。
<%= render @thing %>
与...相同。
<%= render :partial => 'things/thing', :object => @thing %>
如果你传递了一系列模型......
<%= render @things %>
它会为每个人呈现_thing
部分,就好像你这样做了。
<%= render :partial => 'things/thing', :collection => @things %>
注意:这需要Rails 2.3。如果你有早期版本的Rails,你需要使用:partial选项来做同样的事情。
<%= render :partial => @thing %>
答案 2 :(得分:0)