Частичный с несколькими переменными

Я новичок в рельсах и нуждаюсь в некотором руководстве. Я уверен, что неправильно понимаю что-то очевидное.

Я хотел бы, чтобы имя пользователя, оставляющего комментарий, отображалось на странице просмотра. У меня есть частичное, которое проходит через коллекцию комментариев для конкретного объекта, например школы. Я не могу понять, как передать эту пользовательскую переменную в частичное, чтобы я мог отображать имя пользователя для комментария. Моя модель комментариев полиморфна, и я уверен, что это делает ее более сложной.

Вот модели:

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

Контролер школы:

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

Частичный комментарий:

<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>

Вид на школу:

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

person Community    schedule 18.08.2009    source источник
comment
Не похоже, что вы можете добраться до User, оставившего комментарий, из самого Comment.   -  person wombleton    schedule 18.08.2009


Ответы (2)


Я думаю, что у ваших моделей могут быть некоторые проблемы, но вы передаете параметры партиалам, используя locals.

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

Затем внутри частичного у вас есть доступ к пользовательской переменной.

<p><span class="stars"><%= display_stars(comment.stars) %></span><br />
<%= comment.content %><br />
by <%= user %></p>
person Andy Gaskell    schedule 18.08.2009

например от меня

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"%>
person Ahmad Ramdani    schedule 18.08.2009