我有一个看起来像这样的haml链接
=link_to "accept", friendship, :method => :put
我试图将“put”映射到我的控制器中使用“更新”操作
在我的路线中如此
resources :friendships do
collection do
get :create
delete :destroy
put :update
end
end
所以,如果我使用方法“get”它应该得到一个新朋友(这是有效的),如果我删除然后使用“销毁”行动,如果我把“更新”行动得到使用。
我认为我在某种程度上完全错了。
我的“创建”朋友链接看起来像这样
=link_to "Add Friend", friendships_path(:friend_id => provider), :method => :post
这是我的全友.haml
.profile
.providers
%h1 Other Users
- @providers.each do |provider|
%p
=provider.login
=link_to "Add Friend", friendships_path(:friend_id => provider), :method =>
:post
.friends
%h1 Friends
- @friends.each do |friendship|
%p
=friendship.friend.login
=link_to "remove", friendship, :method => :delete
=link_to "message", memos_path(:other_user => friendship.friend)
.friends-out
%h1 Friends Out
- @friends_out.each do |friendship|
%p
=friendship.friend.login
=link_to "remove", friendship, :method => :delete
.friends-in
%h1 Friends In
- @friends_in.each do |friendship|
%p
=friendship.friend.login
=link_to "remove", friendship, :method => :delete
=link_to "accept", friendship, :method => :put
答案 0 :(得分:0)
是的,你几乎做得对,但你这样做是错误的。你应该这样做:
resources :friendships
不多也不少,就是这样。因为当您使用资源时,它会默认将put协议映射到更新操作,它会将删除协议映射到destroy操作,并将POST协议映射到create操作。因为当数据库以某种方式更改(创建,更新,销毁)时不应使用GET。
当您使用link_to帮助程序时,请尝试这样:
=link_to "accept", friendship_path(@friendship), :method => :put
编辑:
还要确保包含默认的javascript以处理指定的发布方法:
<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>