题
我在Rails中有以下多对多的关系(当然是ActiveResource):
class User < ...
has_many :channel_assignments
has_many :channels, :through => :channel_assignments
end
class Channel < ...
has_many :channel_assignments
has_many :users :through => :channel_assignments
end
class ChannelAssignment < ...
belongs_to :user
belongs_to :channel
end
定义路线:
map.resources :users, :has_many => :channel_assignments
更新: rake路由提供以下输出:
user_channel_assignments GET /users/:user_id/channel_assignments(.:format) {:action=>"index", :controller=>"channel_assignments"}
POST /users/:user_id/channel_assignments(.:format) {:action=>"create", :controller=>"channel_assignments"}
new_user_channel_assignment GET /users/:user_id/channel_assignments/new(.:format) {:action=>"new", :controller=>"channel_assignments"}
edit_user_channel_assignment GET /users/:user_id/channel_assignments/:id/edit(.:format) {:action=>"edit", :controller=>"channel_assignments"}
user_channel_assignment GET /users/:user_id/channel_assignments/:id(.:format) {:action=>"show", :controller=>"channel_assignments"}
PUT /users/:user_id/channel_assignments/:id(.:format) {:action=>"update", :controller=>"channel_assignments"}
DELETE /users/:user_id/channel_assignments/:id(.:format) {:action=>"destroy", :controller=>"channel_assignments"}
由于ChannelAssignemnts与用户绑定,我正在使用我的脚手架ChannelAssignmentsController在创建ChannelAssignment时自动将用户分配到频道。
我是通过使用这些网址来实现的:
#/app/views/users/index.html.erb
#show a link to view all channels of a user
<%= link_to 'Channels', user_channel_assignments_path(user) %>
...
#/app/views/channel_assignments/new.html.erb
#assign a channel to currently selected user
<% form_for(@channel_assignment, :url => user_channel_assignments_path(@user) ) do |f| %>
...
那迷人的作品。
但是:取消分配频道的路径是什么,ergo:删除用户的ChannelAssignment?在运行rake路线时找不到它。
必须是
之类的东西<%= link_to 'Destroy', delete_user_channel_assignment, :user_id => @user, :method => :delete %>
对此有任何意见吗?我确信有一种方法可以自动生成此URL。
由于
马特
解决方案
您只需在链接中使用删除动词:
<%= link_to 'Destroy', user_channel_assignment(:user_id => @user, :id => @channel), :method => :delete %>
它也应该在rake路线中可见 - 只需使用删除动词。
不隶属于 StackOverflow