2011-01-29 1 views
3

Donc, désolé si ce n'est pas cohérent ... Je ne connais pas encore toute ma terminologie Ruby/Rails.Accéder à un attribut d'un modèle lié dans Rails

J'ai un modèle appelé « Profil » et un modèle appelé « utilisateur, et les deux sont liés comme ceci:

class Profile < ActiveRecord::Base 
belongs_to :user 
class User < ActiveRecord::Base 
has_one :profile 

Maintenant, dans la « vue de profils index » et « montrent » que je fait, je veux être en mesure d'accéder à l'attribut « nom » du modèle de l'utilisateur Comment puis-je faire, j'imagine que je vais avoir besoin de quelque chose dans le contrôleur qui ressemble à ceci:.?

class ProfilesController < ApplicationController 
    def show 
    @user = User.find(params[:user_id]) 

Et puis l'accès dans la vue comme ceci:

<%= @user.name %> 

Mais ce morceau de code ne fonctionne pas.

Merci pour l'aide.

+0

s'il vous plaît donner plus de détails sur la façon dont «ne fonctionne pas». un écran d'erreur? – Mauricio

Répondre

0

Votre contrôleur devrait fonctionner. Cette partie est correcte.

quelques questions

Est-ce que votre profil ont un user_id?

Avez-vous exécuté une migration qui a créé les attributs user_id pour Profile et profile_id pour User?

+0

Il y a un attribut user_id dans 'Profile', mais il n'y a pas d'attribut profile_id dans 'User'. Devrait-il y avoir? En outre, la colonne user_id est vide dans chaque profil lorsque je vérifie la base de données SQL. Ça ... ça ne peut pas être vrai. – rottendevice

+0

Hmm .. were Profils créés ** après ** vous avez implémenté la relation dans les modèles? – Trip

4

Si l'attribut name appartient au Profil modèle, selon vous:

<%= @user.profile.name %> 

Si l'attribut name appartient au modèle utilisateur, s'il vous plaît arrêter le serveur, exécutez rake db:migrate à assurez-vous que chaque migration a été appliquée à votre base de données; puis exécutez rails console ou ruby script/console pour vérifier si le attribe travaille pour votre modèle:

> u = User.first 
> u.name 

Si la dernière commande retourne une chaîne vide ou le nom de votre premier utilisateur, tout fonctionne. Si vous obtenez un NoMethodError: undefined method vous devriez vérifier votre base de données car la colonne qui devrait gérer l'attribut name est probablement manquante.

+0

Merci pour ça! L'attribut 'nom' fait partie du modèle User, et lorsque je lance les commandes de la console rails, je récupère la chaîne du premier utilisateur dans la base de données. Cela dit, comment puis-je accéder à User.name dans la vue Profile? – rottendevice

+0

Veuillez essayer '' <% = @ user.inspect%> 'au lieu de' <% = @ user.name%> 'pour voir si l'enregistrement que vous voulez charger a été correctement chargé dans le contrôleur. Modifiez et rechargez la vue dans votre navigateur. – lbz

Questions connexes