2010-12-10 4 views
0

J'ai mis en place le modèle, mais je ne sais pas comment écrire le code dans le contrôleur pour obtenir le résultat de la requête SQL suivante ..ROR: expression de requête MySQL

SELECT users.name, events.* FROM users, events WHERE users.id=events.uid 

Merci beaucoup.

Je renomme events.uid -> events.user_id
et mettre en place le modèle pour les deux d'entre eux, les attributs d'événements sont

t.integer :user_id 
    t.string :title 
    t.datetime :hold_time 
    t.string :place 
    t.text :description 

Et nouvelle erreur est
undefined method title for #<User:0x3fb04d8>

Désolé pour vous ennuyer les gars ..

+0

La réponse de Jeff Paquette est tout à fait juste. Au minimum, vous devriez passer par ces 2 ensembles de documentation: http://guides.rubyonrails.org/active_record_querying.html et http://guides.rubyonrails.org/association_basics.html – Swanand

+0

titre est un attribut de l'événement, pas utilisateur. Vous l'appelez sur un objet utilisateur. –

+0

ok, j'ai mal fait dans la page de vue. Je devrais utiliser "<% = e.events.title%>" au lieu de "<% = e.title%>". Merci de votre aide. – Niao

Répondre

1

En supposant que vous avez configuré votre associations vous devriez être capable de le faire comme ça:

u = Users.find(:all, :include => :events, :conditions => "users.id == events.uid") 
+0

J'ai mis en place un modèle utilisateur pour "has_many: events" ET un modèle d'événement pour "belongs_to: users". Mais il montre l'erreur msg => méthode non définie 'eq 'pour nil: NilClass. Pourquoi? – Niao

+0

Pouvez-vous renommer events.uid en events.user_id? C'est la convention que les rails utilise pour les clés étrangères.Sinon, vous devrez spécifier: foreign_key => 'uid' sur l'association de l'événement, par exemple: belongs_to: users,: foreign_key => 'uid'. Pouvez-vous poster une trace de pile pour l'appel de méthode non défini? –

+0

J'ai eu une nouvelle erreur .. et je modifie le poste pour une description plus claire. Je vous remercie. – Niao

0

Je ne peux pas encore de commentaire (pas représentant assez), donc je suis poster une réponse, mais:

"users.id == events.uid" 

devrait être:

"users.id = events.uid" 

Je ne suis pas sûr que cela résoudre votre problème, mais il peut.

si vous voulez trouver tous les utilisateurs et les événements, vous pouvez le faire comme ceci:

users = User.all 
users.each do |user| 
    = user.name 
    user.events.each do |event| 
    = event.name 
    end 
end 

et vos modèles ressemblerait à ceci:

class User < ActiveRecord::Base 
    has_many :events 
end 

class Event < ActiveRecord::Base 
    belongs_to :user 
end 

Je suis sûr qu'il ya une autre façon pour le faire avec event.uid, mais je ne suis pas encore avancé.

+0

Merci, je le remarque aussi, car il va montrer l'erreur SQL. Mais je reçois toujours "la méthode non définie' eq 'pour nil: NilClass "... – Niao

+0

Essayez-vous de trouver l'utilisateur et tous leurs événements? Si oui, pouvez-vous renommer uid en user_id? Si c'est vrai, j'édite ma réponse avec le code que vous pouvez utiliser pour cela. (Je n'ai aucune idée de votre connaissance des rails, alors pardonnez moi si j'explique quelque chose de trop simple) –

0

Vous pouvez utiliser la fonction find_by_sql pour exécuter SQL arbitraire, donc dans votre cas, vous pouvez faire:

e = Event.find_by_sql('SELECT events.*, users.name as user_name from users, events where user.id = events.uid') 

e contiendrait maintenant tous les événements avec correspondance des noms d'utilisateur et vous pouvez accéder au nom d'utilisateur comme tout autre attribut, par exemple puts e.user_name. Bien sûr, il n'est pas possible de changer le nom d'utilisateur car il a été généré dans une requête SQL. Cette approche peut ne pas être en accord avec la philosophie Rails des applications agnostiques DB, mais je trouve qu'il est parfois beaucoup plus facile (et probablement plus rapide) d'utiliser directement SQL au lieu d'essayer de réaliser la même chose avec ActiveRecord.

+0

ouais .. Je sais que je peux juste utiliser find_by_sql .. mais j'espère aussi que je peux comprendre comment faire face à ces choses modèles. En tout cas, merci pour votre aide. – Niao