Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 3 铁路3号线线路问题_Ruby On Rails 3_Rest_Routes - Fatal编程技术网

Ruby on rails 3 铁路3号线线路问题

Ruby on rails 3 铁路3号线线路问题,ruby-on-rails-3,rest,routes,Ruby On Rails 3,Rest,Routes,我有一个像这样的haml链接 =link_to "accept", friendship, :method => :put =link_to "Add Friend", friendships_path(:friend_id => provider), :method => :post 我正在尝试映射“put”以使用控制器中的“update”操作 在我这样的路线上 resources :friendships do collection do get :cre

我有一个像这样的haml链接

=link_to "accept", friendship, :method => :put
=link_to "Add Friend", friendships_path(:friend_id => provider), :method => :post
我正在尝试映射“put”以使用控制器中的“update”操作

在我这样的路线上

resources :friendships do
   collection do
    get :create
    delete :destroy
    put :update
   end
 end
因此,如果我使用方法“get”,它应该会得到一个新的朋友(这很有效),如果我删除,那么使用“destroy”操作,如果我使用“update”操作

我想我是完全错了

我的“创建”好友链接如下所示

=link_to "accept", friendship, :method => :put
=link_to "Add Friend", friendships_path(:friend_id => provider), :method => :post
这是我所有的朋友

.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

是的,你几乎做对了,但你做得不对。你应该这样做:

resources :friendships
=link_to "accept", friendship_path(@friendship), :method => :put
不多不少,就这样。因为在使用资源时,默认情况下,它会将put协议映射到更新操作,将删除协议映射到销毁操作,并将POST协议映射到创建操作。因为当数据库以某种方式更改(创建、更新、销毁)时,不应使用GET

当您使用link_to helper时,可以这样尝试:

resources :friendships
=link_to "accept", friendship_path(@friendship), :method => :put
编辑:

还要确保包含默认javascript以处理指定的发布方法:

<%= javascript_include_tag :defaults %>
<%= csrf_meta_tag %>


:put%>将起作用,因为我认为友谊是同一类的对象。(简而言之,我认为他在运行一个循环)是的,我在一个朋友循环中,我很抱歉我遗漏了这个细节是的,如果友谊是一个例子,它当然会起作用。当我映射它(添加朋友)时,我得到了这个错误。你是怎么说的?未知操作无法找到FriendsControllers的操作“索引”单击上述链接时是否会发生这种情况?