2010-06-20 5 views
0

UPDATERuby objets Affichage

ma fonction show

def show 
@contact = Contact.find(params[:id]) 
@data = Register.all :include => {:session =>[:term, :course]} , :conditions => ["contact_id = ?", params[:id]] 
respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @contact } 
end 

fin

modèles

class Register < ActiveRecord::Base 
belongs_to :session 
belongs_to :contact 
end 

class Session < ActiveRecord::Base 
belongs_to :term 
belongs_to :course 
has_many :registers 
has_many :contacts, :through => :registers 
end 

Salut,

Je suis un peu nouveau à rubis sur des rails. Je veux afficher les éléments suivants -

- !ruby/object:Register 
attributes: 
created_at: 2010-06-20 11:39:06 
updated_at: 2010-06-20 11:39:06 
session_id: "32" 
contact_id: "601" 
id: "1" 
attributes_cache: {} 

session: !ruby/object:Session 
attributes: 
    created_at: 2010-06-19 10:16:13 
    term_id: "26" 
    updated_at: 2010-06-19 10:16:13 
    id: "32" 
    course_id: "4" 
attributes_cache: {} 

course: !ruby/object:Course 
    attributes: 
    created_at: 2010-05-30 14:36:24 
    updated_at: 2010-05-30 14:36:28 
    course_name: Beginner 
    id: "4" 
    course_type: Running 
    attributes_cache: {} 

term: &id001 !ruby/object:Term 
    attributes: 
    number: "1" 
    start_date: "2010-06-19" 
    created_at: 2010-06-19 10:16:13 
    updated_at: 2010-06-19 10:16:13 
    id: "26" 
    attributes_cache: {} 

Je pense que je fais mal

<% @data.Register.each do |c| %> 
    <tr> 
     <td><%=h c.Term.number %></td> 
     <td><%=h c.Course.course_name %></td> 
    </tr> 
    <% end %> 

Merci

Répondre

1

Ruby on Rails convention est que les classes sont capitalisées, les instances d'une classe sont ne pas.

Si un modèle inscription comprend une déclaration

has_one term 

Ensuite, vous devez accéder à terme à l'aide

registration = Registration.find xxx # get an instance of the Registration model 
registration.term # access the associated term model 
        # do not use registration.Term 

Alors ...

1) Vous devez nous montrer votre code du contrôleur. Et vos fichiers de classe ActiveRecord - avez-vous correctement défini les relations en utilisant belongs_to, has_many déclarations?

2) Votre sw devrait être plus comme:

# Controller 
def show 
    # Shows all the registrations for person_id 
    # args: params['person_id'] 
    @registrations = Register.find_all_by_person_id(params['person_id'].to_i_ 
end 

# View 

<% @registrations.each do |r| %> 
<tr> 
    <td><%=h r.term.number %></td> 
    <td><%=h r.course.course_name %></td> 
</tr> 
<% end %>  

AJOUTÉE

Aussi, soyez très prudent au sujet de la nomination d'un modèle "session" - le problème potentiel est que les sessions de CGI peuvent être stockées dans le modèle Session si les sessions db-backed sont activées.

+0

Merci pour votre réponse, j'ai ajouté ma méthode de contrôleur et une partie de mon code de modèle. Oui les relations fonctionnent, je pense que je fais ma trouvaille mal. – Alex

+0

Regardez dans votre développement.log pour voir si le sql de la recherche est ce que vous voulez. Aussi, devrait probablement être: @contact = Contact.find (params [: id] .to_i) –

+0

Merci, je vais jouer avec. – Alex

Questions connexes