Ошибка маршрутизации - пользовательский контроллер - PullRequest
0 голосов
/ 03 апреля 2012

У меня есть много через ассоциацию.

Фирмы имеют много пользователей через подписчиков.Я хочу, чтобы пользователи могли следить за фирмами.- Я использую Devise для пользователей.

У меня есть следующее действие в контроллере моей фирмы.

def follow
  @firm.users << current_user
end

в моих маршрутах.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 голосов
/ 03 апреля 2012

все выглядит хорошо, и это должно работать отлично. За исключением того, что я вижу опечатку в следующей строке

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

после метода: должно быть => , а не : . это сделает ссылку запросом на получение, а не запросом на публикацию, что может быть проблемой, попробуйте использовать простую ссылку и замените сообщение, которое попадет в ваши маршруты. rb, просто чтобы проверить, возникает ли проблема из-за этого.

Вы также можете проверить методы маршрутизации из консоли

rails c
app.follow_firm_path(2)

Я заметил, что у вас также есть ошибка в ваших маршрутах, должно быть =>, а не: after: on

resources :firms do
 post :follow, :on => member
end
0 голосов
/ 03 апреля 2012

Вы должны определить методы следующим образом ...

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

Я думаю, что если этот метод не создает ничего, его тип должен быть получен.

Попробуйте это

...