0

Ich habe eine hat viele durch Assoziation.Routing-Fehler - benutzerdefinierte Controller

Unternehmen haben viele Benutzer durch Folgen. Ich möchte, dass Benutzer Firmen folgen können. - Ich benutze Devise für die Benutzer.

Ich habe die folgende Aktion in meinem Firmencontroller.

def follow 
    @firm.users << current_user 
end 

in meinem routes.rb

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

und in meinem Unternehmen sehen

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

Jedoch, wenn ich halten Sie die nächste Routing-Fehler im Browser bekommen

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

Rake Routes bestätigt das folgende flügel

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

Irgendwelche Ideen, was das Problem sein kann?

Vielen Dank


Edit: Controller-Code

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 

ich in der Indexansicht die Folgewirkung in einem Teil verwende.

+0

Warum Verwenden Sie 'on:: member' und 'method:: post'. Der richtige Weg ist ': = =: Mitglied' und ': Methode =>: Post' – Vik

Antwort

0

alles sieht gut aus, und dies sollte perfekt funktionieren. Außer, dass ich einen Tippfehler in der folgenden Zeile sehe

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

nach: Methode sollte es ein => keine :. Dies macht den Link eine Anfrage erhalten, nicht eine Post-Anfrage, das könnte das Problem sein, versuchen Sie es mit einem einfachen Link und ersetzen Post wird in Ihrem routes.rb nur um zu testen, ob das Problem aufgrund dieser entsteht.

Sie können auch Routen Methoden aus der Konsole testen

rails c 
app.follow_firm_path(2) 

ich bemerkt, dass Sie auch einen Fehler in der Routen haben, sollte es ein = sein> nicht a: nach: auf

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

ah, ich dachte, dass a: nach war auch mit hash-rakete nach einem symbol. Habe die ganze Syntax geändert zu: und => und ... das Terminal scheint uns zuzustimmen, dass die Route existiert: "/ firmen/2/folgen" Allerdings sagt der Browser immer noch: Keine Route stimmt überein {: action => "follow",: controller => "firmen"} – RMcNairn

+0

hast du versucht, beide in deine routes.rb und in deinen link zu bekommen. 'Ressourcen: Unternehmen tun : Folgen,: auf => Mitglied end' ' <% = link_to "Follow", follow_firm_path (@firm)%> ' – Abid

+0

yeh ich es mit GET auf beide versuchten. Könnte es ein Problem mit meiner Controller-Aktion sein? – RMcNairn

0

Sie Methoden wie folgt definieren sollte ...

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

Ich denke, wenn diese Methode nicht alles schafft seine Art erhalten werden sollte.

Probieren Sie es

+0

Hallo kasif.ali, Ich gab das einen Versuch und das kam als Fehler: kann Mitglied außerhalb der Ressource nicht verwenden (s) Umfang. Als ich es eine leicht modifizierte Version von Ihren Vorschlag übergeben: Ressourcen: Unternehmen tun Sammlung tun Beitrag: folgen, auf: Mitglied Ende Ende. ich die gleichen Keine Route Streichhölzer {: action => „folgen“,: controller => „Unternehmen“} Für den Fall, dass ich es ändern zu bekommen, erhalte ich die oben genannten Fehler auf Scope. – RMcNairn

Verwandte Themen