Rails 3路线问题

时间:2011-05-20 11:09:02

标签: ruby-on-rails-3 rest routes

我有一个看起来像这样的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

1 个答案:

答案 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 %>