0

谁能向我解释一下幕后发生的事情

浏览有关创建任务管理器的教程,我需要显示我的任务,所以我选择了

each .. do

但后来我需要添加一些复选框和按钮来划掉我的任务并将它们移动到另一个类别,这意味着处理表单。在尝试将 do/each 与 form 合并的几次失败后,我上网了,我偶然发现了这段代码:

指数:

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

_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 %>

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

Rails 如何知道我想为特定变量渲染 _task 部分?这是实际的命名约定吗?

如何在没有部分的情况下以这种形式编码?

4

1 回答 1

1

是的,命名约定确实在起作用。

如果传递的变量是一个类似数组的对象,它会自动设置: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 %>
于 2013-07-24T11:39:25.570 回答