2009-11-17 4 views
0

J'ai déjà écrit quelques sites RoR, mais je n'ai jamais trop pris la peine de sécher mes points de vue, car je n'ai jamais vu que le code.SÉCHER mon point de vue, aide/méthode/autre chose?

Juste à partir d'un nouveau site, qui est susceptible d'être une collaboration, et ont besoin d'aide

J'appelle cette ligne à plusieurs reprises dans mon point de vue, et à partir de plusieurs endroits.

<%= Person.find_by_id(rider.person_id).name %> 

Je voudrais être en mesure de faire juste

<%= get_name(rider.person_id) %> 

donc je suppose que je mettrais ce code quelque part

def get_name=(id) 
    Person.find_by_id(id).name 
end 

Mais où? J'ai essayé dans le modèle et comme aide, mais obtiens toujours le nomethoderror.

+1

Pourquoi faites-vous cela? Si vous avez des associations bien établies. 'rider.person.name' devrait suffire. – EmFi

Répondre

0

Vous avez tort de nommer cette méthode. Pourquoi vous mettez "=" dans le nom de la méthode?

Vous devez appeler ce code uniquement dans le contrôleur et, dans les vues, afficher uniquement le résultat. Le meilleur endroit pour cette méthode est un assistant.

def get_person_name_by_id(id) 
    Person.find_by_id(id).name || nil 
end 
+0

Merci, fonctionne bien, le "=" l'arrêtait de travailler quand j'ai essayé cela dans le passé – Nick

0

essayer application_controller.rb

+0

Je l'ai fait, mais le "=" signe que je l'avais empêché de travailler, voir ci-dessous la réponse – Nick

0

Que diriez-vous d'une méthode sur la classe Rider qui retourne juste le nom?

def name 
    person = Person.find_by_id(@person_id) 
    if !person.nil? 
     return person.name 
    end 
    return nil 
end 

utilisé comme

<%= rider.name %> 

ou, vous pouvez utiliser une méthode statique/classe de la classe Person.

def Person.get_name(rider) 
    if !rider.nil? 
     person = find_by_id(rider.person_id) 
     if !person.nil? 
      return person.name 
     end 
    end 
    return nil 
end 

appelé comme

<%= Person.get_name(rider) %> 

Notez que je laissai tomber la référence à l'ID dans le code de la vue.

+0

Impossible de faire fonctionner cela – Nick

0

Rails est une question de convention plutôt que de configuration. Toutes ses méthodes d'assistance supposent les options les plus courantes sauf si elles sont remplacées. Cependant, les modèles ActiveRecord n'ont pas de valeur par défaut.

Spécification de l'action par défaut:

class Person < ActiveRecord::Base 
    def to_s 
    name 
    end 
end 

Maintenant, chaque fois que vous essayez d'évaluer une instance de personne dans un contexte de chaîne que vous aurez un nom.

Alors

<%= Person.find_by_id(rider.person_id).name %> 

peut maintenant être remplacé par

<%= rider.person %> 

Pour tout ce que vous pouvez spécifier le terrain et les méthodes.

Questions connexes