路由错误 - 自定义控制器

时间:2012-04-03 09:30:33

标签: ruby-on-rails ruby-on-rails-3 controller routes has-many-through

我有很多通过协会。

公司有很多用户跟随。 我希望用户能够关注公司。 - 我正在为用户使用Devise。

我的公司控制器中有以下行动。

def follow
  @firm.users << current_user
end

在我的routes.rb

resources :firms do
 post :follow, on: :member
end

并在我的公司视图中

<%= link_to "Follow", follow_firm_path(@firm), method: :post %>

然而,当我在浏览器中不断收到以下路由错误

No route matches {:action=>"follow", :controller=>"firms"}

Rake Routes确认以下内容

follow_firm POST   /firms/:id/follow(.:format)   firms#follow

任何想法可能是什么问题?

非常感谢


修改:控制器代码

class FirmsController < ApplicationController 


before_filter :authenticate_user!, :except => [:show, :index] 

def index 
  @firm_names = Firm.all.map &:name 
  direction = params[:direction] 
  direction ||= "ASC" 
  @firms = Firm.order("name #{direction}")   
  respond_to do |format| 
   format.html # index.html.erb 
   format.js 
  end 
end 

def follow 
 @firm.users << current_user 
end 

我在索引视图中使用了部分跟踪操作。

2 个答案:

答案 0 :(得分:0)

你应该定义这样的方法......

  resources :firms do
    collection
      post :follow, on: :member
    end
  end

我认为如果这个方法没有创建任何东西,那么它的类型应该是。

试试吧

答案 1 :(得分:0)

一切看起来都不错,这应该是完美的。除了我在下一行中看到一个拼写错误

<%= link_to "Follow", follow_firm_path(@firm), method: :post %>

在:方法之后应该 =&gt; 而不是。这将使链接成为获取请求而不是发布请求,这可能是问题,尝试使用简单链接并替换post将获取您的routes.rb只是为了测试问题是否由于此而产生。

您还可以从控制台测试路线方法

rails c
app.follow_firm_path(2)

我注意到你的路线也有错误,应该有一个=&gt;不是:在...之后:

resources :firms do
 post :follow, :on => member
end