0

我是 Rails 新手,一直在自学。这也是我第一次在 Stackoverflow 上发帖,尽管我经常提到它。下面是显示名为 Ideas 的模型记录的 ERB 代码片段:

<% @idea.each do |i| %>
  <tr>
    <td><%= i.name %></td>
    <td><%= i.description %></td>
    <td><a class="btn" href="share"><i class="icon-share"></i></a></td>
    <td>
      <%= link_to(ideas_edit_path(@i), :class => 'btn') do %>
             <i class="icon icon-edit"> </i>
      <% end %>
    </td>
    <td><a class="btn" href="destroy"><i class="icon-trash"></i></a></td>
  </tr>
<% end %>

每行包含“名称”、“描述”,然后是名为“共享”、“编辑”、“销毁”的图标。我想为该特定记录的每个操作显示一个表单。我不知道如何将记录的 id 传递给这些操作。有人可以指出我正确的方向吗?我认为我已经正确定义了路线,因为我可以输入完整的 ERL (/ideas/2/edit) 并显示编辑表单。

4

3 回答 3

0

将您的@idea 更改为@ideas 以反映它是一个集合。

您迭代的集合应该类似于

@ideas.each do |idea|
  link_to(edit_idea_path(idea), :class => 'btn') 
end

所以你的链接现在是edit_idea_path(idea)

表单文件将被app/view/ideas称为edit.html.erb
实际上表单由新和编辑操作共享,因此最好的想法是_form.html.erb在新表单和编辑表单中都包含并包含它。

.erb 模板中的代码就像

form_for @idea do |f|
  various input fields
end

我建议您快速尝试使用 rails 中可用的脚手架创建另一个应用程序。然后看看生成了什么,你会更好地了解应该命名哪些东西,它们在哪里等等。
这听起来可能有点激烈,但实际上它很简单:

$ cd ~          # Go to root
$ mkdir newapp  # Create a new directory
$ cd newapp     # Create a new rails app
$ rails generate scaffold Idea name:string description:text  # Use scaffolding
于 2013-01-24T20:05:00.737 回答
0

当您使用命名路由(即ideas_edit_path)时,您只需将模型对象作为参数传入,它们就会为该对象构建正确的路由。上面的代码中有一个错误,您指的是@i它应该是什么时候i(在它上面的循环中声明的局部变量)。

另一个小问题:您可能想要使用@ideas而不是@idea集合来表明它是一个集合,但这本身并不一定是一个错误。

于 2013-01-24T20:07:41.000 回答
0

您可以将link_to助手与 a一起使用do来构建块。

<%= link_to edit_idea_path(i), class: "btn" do %>
  <i class="icon icon-edit"></i>
<% end %>

看起来您使用带有 Rails 的 Bootstrap 框架——非常好的组合!

于 2013-01-24T20:21:22.297 回答