Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何对多个资源使用同一部分?_Ruby On Rails_Ruby On Rails 4_Twitter Bootstrap 3_Erb - Fatal编程技术网

Ruby on rails 如何对多个资源使用同一部分?

Ruby on rails 如何对多个资源使用同一部分?,ruby-on-rails,ruby-on-rails-4,twitter-bootstrap-3,erb,Ruby On Rails,Ruby On Rails 4,Twitter Bootstrap 3,Erb,我正在使用表列出索引模板中从数据库记录的内容,像往常一样,最后三个表单元格用于显示、编辑和销毁对象的链接 。/users/index.html.erb <table> ... <% @users.each do |user| %> <tr> ... <td><%= link_to 'Show', user %></td> <td><%=

我正在使用表列出索引模板中从数据库记录的内容,像往常一样,最后三个表单元格用于显示、编辑和销毁对象的链接

。/users/index.html.erb

<table>
  ...
    <% @users.each do |user| %>
      <tr>
        ...
        <td><%= link_to 'Show', user %></td>
        <td><%= link_to 'Edit', edit_user_path(user) %></td>
        <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<td>
  <%= link_to dist do %>
    <span class="glyphicon glyphicon-eye-open"></span>
  <% end %>
</td>
<td>
  <%= link_to send("edit_#{dist}_path(#{dist})") do %>
    <span class="glyphicon glyphicon-edit"></span>
  <% end %>
</td>
<td>
  <%= link_to dist, method: :delete, data: { confirm: 'Are you sure?' } do %>
    <span class="glyphicon glyphicon-remove"></span>
  <% end %>
</td>

...
...
无论如何,我试图将这些链接文本替换为一些引导程序的标志符号图标,我成功了,但它变得混乱了,所以我认为最好将其放在一个部分中,并使用一个变量与使用相同表布局的所有索引模板共享

。/shared/_editLinks.html.erb

<table>
  ...
    <% @users.each do |user| %>
      <tr>
        ...
        <td><%= link_to 'Show', user %></td>
        <td><%= link_to 'Edit', edit_user_path(user) %></td>
        <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
<td>
  <%= link_to dist do %>
    <span class="glyphicon glyphicon-eye-open"></span>
  <% end %>
</td>
<td>
  <%= link_to send("edit_#{dist}_path(#{dist})") do %>
    <span class="glyphicon glyphicon-edit"></span>
  <% end %>
</td>
<td>
  <%= link_to dist, method: :delete, data: { confirm: 'Are you sure?' } do %>
    <span class="glyphicon glyphicon-remove"></span>
  <% end %>
</td>

然后,使用以下代码行在索引表中呈现分部。将资源名称作为变量传递

 <%= render 'editLinks', dist: user %>

然后,第一个和最后一个链接似乎可以正常工作,但我在中间的“编辑”链接中遇到了这个错误

undefined method `edit_user_path(#<User:0x007f611ab015a8>)' for #<#<Class:0x007f611a7064d0>:0x007f611ab143b0>
未定义的方法“编辑用户路径(#)”,用于#

您能告诉我是什么原因导致此错误以及如何使其工作吗?

将参数传递给以逗号分隔的路由/方法

<%= link_to send("edit_#{dist.class.name.underscore}_path", dist) do %>


方法语法导致错误的行是因为您试图将对象视为字符串

由于
\u路径
帮助程序通常是
snake\u大小写
,因此可以对对象的类名使用
下划线
方法,如下所示:

<%= link_to send("edit_#{dist.class.name.underscore}_path", dist) do %>


正如Deepak所指出的,您还可以提供
dist
对象作为
send
的第二个参数。否则,您最终将出现类似的错误,因为您将再次将对象视为可以强制转换为字符串的值。

我完全不知道“我是索引任何追索记录的表”是什么意思。请尝试
dist.id
onceThanks,但这返回了相同的错误
未定义方法
edit#u path'for#`ah。。将
edit#{dist}_路径
更改为
edit#{dist.class.name.underline}_路径