let*_*etz 42 html ruby routes ruby-on-rails path
我是Rails的新手,我似乎有类似的问题,但我无法解决我的问题.
我的路线:
resources :users do
resources :items
end
Run Code Online (Sandbox Code Playgroud)
我的模特:
class Item < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :items
end
Run Code Online (Sandbox Code Playgroud)
HTML:
<% @items.each do |item| %>
<tr>
<td><%= item.id %></td>
<td><%= item.code %></td>
<td><%= item.name %></td>
<td><%= item.quantity %></td>
<td><%= link_to "Edit", edit_user_item_path(item) %></td> <---- error
Run Code Online (Sandbox Code Playgroud)
而且我得到了同样的错误:
No route matches {:action=>"edit", :controller=>"items",
:user_id=>#<Item id: 1, user_id: 1, code: "123", name: "test",
quantity: 12, , created_at: "2014-02-11 15:45:30", updated_at:
"2014-02-11 15:45:30">, :id=>nil, :format=>nil} missing required keys: [:id]
Run Code Online (Sandbox Code Playgroud)
jkl*_*ina 60
您需要包括用户,因为它是嵌套路由.所以类似于:
<td><%= link_to "Edit", edit_user_item_path(@user, item) %></td>
Run Code Online (Sandbox Code Playgroud)
小智 9
问题是您使用的是嵌套资源:
resources :users do
resources :items
end
Run Code Online (Sandbox Code Playgroud)
所以,当你有一个链接:
<%= link_to "Edit", edit_user_item_path(item) %>
Run Code Online (Sandbox Code Playgroud)
它将缺少一个,user_id因此很容易检查问题是否正在使用rake routes.它会列出这样的路线:
edit_user_item GET /users/:user_id/items/:id/edit(.:format) items#edit
Run Code Online (Sandbox Code Playgroud)
您可以看到上面的路线并通过链接进行检查,您将看到它没有user_id.这是主要原因!
您错过user_id了以下路径:
edit_user_item_path(user_id, item)
Run Code Online (Sandbox Code Playgroud)
您可以在运行时找到的格式bundle exec rake routes | grep edit_user_item
| 归档时间: |
|
| 查看次数: |
58704 次 |
| 最近记录: |