2012-04-06 2 views
1

Ich bin eine benutzerdefinierte Methode zum Formatieren meiner JSON-Daten.Wie übergeben Sie Argumente von Controller zu einer Model-Methode in Ruby on Rails?

Mein Controller sieht wie folgt aus:

("def" is taken out for brevity sake) 

respond_to do |format| 
    format.json { render json: @user, :methods => [:follower_count(params[:id])] } 
end 

Mein Modell sieht wie folgt aus:

def follower_count user_id 
    User.find(user_id).friendships.count 
    end 

Dies ist jedoch ein Syntaxfehler führt, unerwartete '('

ich bin. nicht sicher, wie man ein Argument an die Methode "follower_count" in der Steuerung übergeben. Ich habe versucht, in Quadrat - nicht funktioniert. Ich versuchte keine Klammern - immer noch nicht funktioniert. Wie übergeben Sie Argumente ?!

Antwort

2

Syntaxfehler besagt, dass Sie versuchen, das Symbol :follower_count als Funktion zu verwenden. Aber die Hauptfrage ist, warum Sie user_id an Instanzmethode übergeben, wenn Sie es bereits als @id in allen Instanzmethoden der Klasse User verfügbar haben.

Korrekter Code sieht ungefähr so ​​aus:

# controller 
format.json { render json: @user, :methods => [:follower_count] } 

# User.rb 
def follower_count 
    friendships.count 
end 
+0

Wow. Touche - Das ist viel einfacher! Ich denke, ich wusste nicht, dass die Methode im Modell bereits für den aktuellen Benutzer bestimmt war. Vielen Dank. –

+1

aber was, wenn ich ein Argument zusammen mit dem Methodennamen übergeben möchte? Ich möchte Anforderungsobjekt übergeben, da auf dieses Objekt nicht über das Modell zugegriffen werden kann. – inquisitive

Verwandte Themen