0

У меня есть много сквозной ассоциации.Ошибка маршрутизации - пользовательский контроллер

У фирм есть много пользователей через Follows. Я хочу, чтобы пользователи могли следить за фирмами. - Я использую 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 

Любые идеи, в чем проблема может быть?

Большое спасибо


Edit: контроллер код

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 

Я использую последующих действий в частично в индексном.

+0

Почему вы используете «on:: member» и «method:: post». Правильный способ: ': on =>: member' и ': method =>: post' – Vik

ответ

0

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

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

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

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

rails c 
app.follow_firm_path(2) 

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

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

ах, я подумал, что a: после синонимов хеш-ракеты после символа. Изменили весь этот синтаксис на: и => и ... терминал, похоже, согласен с нами, что маршрут существует: "/ фирмы/2/follow" Однако браузер все еще заявляет: никаких совпадений маршрутов {: действие => «follow»,: controller => «фирмы»} – RMcNairn

+0

Вы пытались использовать get на своих маршрутах.rb и в вашей ссылке. 'ресурсы: фирмы делают ПОЛУЧАЕТЕ: следовать,: на => член end' ' <% = link_to "Follow", follow_firm_path (@firm)%> ' – Abid

+0

Yeh Я пробовал с ГЭТ на обоих. Может быть, это проблема с моим действием контроллера? – RMcNairn

0

Вы должны определить методы, как это ...

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

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

Попробуйте

+0

Hi kasif.ali, Я дал эту попытку, и это произошло как ошибка: не может использовать член внешнего ресурса (ы). Когда я прохожу его слегка модифицированную версию своего предложения: ресурсы: фирмы делают сбор сделать пост: следовать на:: член конец конец. я получаю те же нет соответствующего маршрута {: действие => «следовать»,: контроллер => «фирмы»} В том случае, если я изменить его на GET, я получаю вышеуказанную ошибку на Scope. – RMcNairn

Смежные вопросы