神奇的渲染形式和部分变量

时间:2013-07-24 11:32:15

标签: ruby-on-rails ruby

任何人都可以向我解释幕后发生的事情

通过创建任务管理器的教程我需要显示我的任务,所以我选择了

each .. do

但是后来我需要添加一些复选框和按钮来交叉我的任务并将它们移动到另一个类别,这意味着处理表单。经过一些不成功的尝试合并do / each与表格后,我上网了,我偶然发现了这段代码:

指数:

<%= render @incomplete_tasks %>
<%= render @completed_tasks %>

_task partial:

<%= form_for task do |f| %>
  <%= f.check_box :complete %>
  <%= f.submit "Update" %>
  <%= f.label :complete, task.name %>
  <%= link_to "(remove)", task, method: :delete, data: {confirm: "Are you sure?"} %>
<% end %>

这正确地呈现了所需的代码(WAT!),这很好,但我不知道它是如何做到的,这很糟糕。不幸的是,在文档here中没有太多关于渲染变量的信息。

Rails如何知道我想为特定变量渲染_task部分?这是行动中的命名惯例吗?

如何在没有偏见的情况下以此形式编码?

1 个答案:

答案 0 :(得分:1)

是的,命名惯例确实在起作用。

如果传递的变量是类似于Array的对象,它会自动设置:collection选项以渲染部分。并且对于集合的每个元素,它尝试呈现与集合中的ActiveRecord对象相同名称的部分。

如果没有偏见,你可以这样做:

<% @incomplete_tasks.each do |task| %>
  <%= form_for task do |f| %>
    <%= f.check_box :complete %>
    <%= f.submit "Update" %>
    <%= f.label :complete, task.name %>
    <%= link_to "(remove)", task, method: :delete, data: {confirm: "Are you sure?"} %>
  <% end %>
<% end %>