Частичное с несколькими переменными
Я новичок в рельсах и нуждаюсь в руководстве. Я уверен, что я неправильно понимаю что-то очевидное.
Я хотел бы, чтобы имя пользователя, который оставляет комментарий, отображалось на странице просмотра. У меня есть часть, которая проходит через сборник комментариев для конкретного объекта, например, школы. Я не могу понять, как передать эту пользовательскую переменную в партиал, чтобы я мог отобразить логин для комментария. Модель "Мои комментарии" полиморфна, и я уверен, что это усложняет ситуацию.
Вот модели:
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 %>
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>
Например от меня
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"%>