2009-08-18 8 views
0

Je suis nouveau sur les rails et j'ai besoin de conseils. Je suis sûr d'avoir mal compris quelque chose d'évident.Partiel avec plusieurs variables

Je voudrais que le nom d'utilisateur de la personne qui laisse un commentaire apparaisse sur la page d'affichage. J'ai un partiel qui passe par la collection de commentaires pour l'objet particulier, par exemple une école. Je ne peux pas comprendre comment passer cette variable utilisateur dans le partiel afin que je puisse afficher le nom de connexion pour le commentaire. Mon modèle de commentaires est polymorphe et je suis à peu près sûr que cela rend la chose plus complexe.

Voici les modèles:

class Comment < ActiveRecord::Base 
belongs_to :commentable, :polymorphic => true 
has_many :comments, :through => :schools 

class School < ActiveRecord::Base 
belongs_to :installation 
belongs_to :neighborhood 
has_many :comments, :as => :commentable 

class User < ActiveRecord::Base 
has_many :users, :through => :schools 

contrôleur de l'école:

def show 
    @installation = Installation.find(params[:installation_id]) 
    @school = School.find(params[:id]) 
    @neighborhood = @school.neighborhood 
    @comment = @school.comments 
respond_to do |format| 
    format.html # show.html.erb 
    format.xml { render :xml => @school } 
    end 
end 

Le commentaire partiel:

<div class="box-one"> 
<img src="/images/comment_top.png" alt="" /> 
<div class="inside"> 
    <p><span class="stars"><%= display_stars(comment.stars) %></span><br /> 
<%= comment.content %></p> 
</div> 
<img src="/images/comment_bottom.png" alt="" /> 
</div> 

La vue de l'école:

<%= render :partial => "shared/comment", :collection => @comment %> 
+3

Il ne semble pas que vous pouvez obtenir t o l'utilisateur qui a fait le commentaire à partir du commentaire. – wombleton

Répondre

2

Je pense que vos modèles peuvent avoir quelques problèmes, mais vous passez des paramètres aux partiels en utilisant locals.

<%= render :partial => "shared/comment", :locals => { :user => your_user } %> 

Ensuite, à l'intérieur du partiel, vous avez accès à la variable utilisateur.

<p><span class="stars"><%= display_stars(comment.stars) %></span><br /> 
<%= comment.content %><br /> 
by <%= user %></p> 
0

par exemple de me

def show 
@school = School.find_by_id_and_user_id(params[:id], 
params[:user_id],:include => [:user, [:comments => :user]]) 
end 

class Comment < ActiveRecord::Base 
    belongs_to :school, :counter_cache => true 
    belongs_to :user 
end 

class School < ActiveRecord::Base 
    belongs_to :user, :counter_cache => true 
    has_many :comments 

    def after_save 
    self.user.update_attribute(:last_activity, "bla bla bla") 
    self.user.update_attribute(:last_activity_at, Time.now) 
    end 
end 

class User 
    has_many :school or has_one 
    has_many :comments 
end 

<div class="box-one"> 
<img src="/images/comment_top.png" alt="" /> 
<div class="inside"> 
     <% @schools.comments.each do |comment| -%> 
     <%= comment.created_at.to_s(:short) %> 
     <p><span class="stars"><%= <%= comment.user.stars %> said: ## or<%= comment.user.username %> said:##</p> %></span><br /> 
<%= comment.content %></p> 

</div> 
<img src="/images/comment_bottom.png" alt="" /> 
</div> 

<%= render :partial => "shared/comment"%> 
Questions connexes