Как я могу удалить эту логику из своего взгляда? - PullRequest
0 голосов
/ 26 сентября 2010

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

class User < ActiveRecord::Base
has_many :posts
has_many :comments

Сообщения принадлежат пользователям и имеют много комментариев.

class Post < ActiveRecord::Base
has_many :comments
belongs_to :user

Комментарии принадлежат пользователям и сообщениям

class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user

Вмой пост # показать вид Я показываю комментарии под постом.Я хочу показать имя пользователя, который оставил комментарий.На данный момент у меня есть это на мой взгляд:

<% @post.comments.each do |comment| %>
  <p>
    <b>Commenter:</b>
    <%= link_to  User.find(comment.userid).login, User.find(comment.userid) %>
  </p>

  <p>
    <b>Comment:</b>
    <%= comment.body %>
  </p>
<% end %>

У меня, вероятно, должна быть эта логика в контроллере сообщений.Но я в замешательстве.@ post.comments возвращает массив (?) комментариев, принадлежащих посту.Это означает, что у меня не может быть @commenter = @ post.comments.userid.Меня смущает эта проблема, поэтому я, возможно, не объяснил это хорошо.

Ответы [ 2 ]

4 голосов
/ 27 сентября 2010

Чтобы быть более точным в первом ответе, вы просто делаете это:

<%= link_to comment.user, comment.user %>

В вашей модели User переопределите метод to_s следующим образом, так что comment.user возвращает нужную строку:

def to_s
  self.login
end

Наконец, используйте готовую загрузку, чтобы получить все данные за один вызов SQL, вместо того чтобы запрашивать БД отдельно для каждого комментария. В вашем посте модель:

class Post < ActiveRecord::Base
  has_many :comments, :include => :user

А в пост-контроллере:

def show
  @post = Post.find(params[:id], :include => :comments)
3 голосов
/ 26 сентября 2010

На самом деле во время цикла комментариев вы можете использовать comment.user для получения данных пользователя, поскольку вы объявили отношение User has_many Comments.

...