Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 没有与嵌套资源的[DELETE]匹配的路由_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 没有与嵌套资源的[DELETE]匹配的路由

Ruby on rails 没有与嵌套资源的[DELETE]匹配的路由,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个嵌套模型设置,用户有多个制造商,制造商有多条生产线。当我试图从行索引中删除行的实例时,会收到错误的路由消息。我不确定我做错了什么,但可能很简单,希望有人能帮我减轻一些心痛。我读过hartl的东西,但我对嵌套资源和路由仍然非常陌生 ==型号=== class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable,

我有一个嵌套模型设置,用户有多个制造商,制造商有多条生产线。当我试图从行索引中删除行的实例时,会收到错误的路由消息。我不确定我做错了什么,但可能很简单,希望有人能帮我减轻一些心痛。我读过hartl的东西,但我对嵌套资源和路由仍然非常陌生

==型号===

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :manufacturers
end
======

class Manufacturer < ActiveRecord::Base
  belongs_to :user
  has_many :lines
end
class Line < ActiveRecord::Base
  belongs_to :manufacturer
end
app/views/lines/index.html.erb

<h1>Listing lines</h1>

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Manufacturer</th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </thead>

  <tbody>
    <% @lines.each do |line| %>
      <tr>
        <td><%= line.name %></td>
        <td><%= line.manufacturer_id %></td>
        <td><%= link_to 'Show', manufacturer_lines_path(line.manufacturer, line) %></td>
        <td><%= link_to 'Edit', edit_manufacturer_line_path(line.manufacturer, line) %></td>
        <td><%= link_to 'Destroy', manufacturer_lines_path, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

<br>
列出行
名称
制造商


这是试图使用错误的路由帮助程序:

<td><%= link_to 'Destroy', manufacturer_lines_path, method: :delete, data: { confirm: 'Are you sure?' } %></td>

应该是:

<td><%= link_to 'Destroy', manufacturer_line_path(line.manufacturer, line), method: :delete, data: { confirm: 'Are you sure?' } %></td>

manufacturer\u lines\u path
所做的是使用路由辅助程序生成一个路径,例如
/manufacturers/1/lines
,它是完全有效的。无效的是,此链接正在向该路由发出
DELETE
请求,如果您查看
rake routes
输出,您将看到您没有此路由。您可能只有一个用于
GET
,另一个用于
POST
,但不用于
DELETE

因此,解决方案是使用正确的路径辅助工具,
manufacturer\u line\u path
,它获取一个
manufacturer
对象和一个
line
对象,并从中生成一个路由,例如
/manufacturers/1/lines/2
。同样,在
rake routes
的输出中,您将看到为该路径定义了两条路由。一个
获取
、一个
放置
、一个
补丁
和一个
删除


最后一个路由是当您发出
DELETE/manufacturers/1/lines/2
请求时要匹配的,应用程序的路由器将把它路由到
linescocontroller
destroy
操作,在参数中传入
manufacturer\u id=1
id=2

现在我得到了答案#@momchenr的未定义方法“line”:这是因为在
销毁
操作中,您引用的是
制造商。line
而不是
@line
。没有
manufacturer.line
,因为manufacturer
有很多:line
。啊。现在我得到了未定义的局部变量或方法'lines\uURL'。。。这是否意味着我应该将其更改为:manufacturer\u lines\u path?为了重定向到制造商的行索引页面,请使用“manufacturer\u lines\u url(@manufacturer)”。当您对路线感到困惑时,请参考“rake routes”结果。
<td><%= link_to 'Destroy', manufacturer_lines_path, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><%= link_to 'Destroy', manufacturer_line_path(line.manufacturer, line), method: :delete, data: { confirm: 'Are you sure?' } %></td>