Ruby on Rails вопрос "найти" - PullRequest
       0

Ruby on Rails вопрос "найти"

1 голос
/ 23 августа 2010

Я сейчас использую:

@user = User.find(params[:id])
@posts = Post.find(:all, :conditions => ["user_id = ?", @user.id])
@comments = Comment.find(:all, :conditions => ["user_id = ?", @user.id])

Который идентифицирует пользователя и перечисляет все его комментарии, которые он сделал. Однако я хочу установить локальную переменную для использования в шаблоне _comment.html.erb. Я хочу, чтобы переменная перечисляла имя сообщения, расположенное в столбце «имя» таблицы сообщений.

Я пытался сделать:

@post_id = @comments.post_id
@post_name = @post_id.name

Но он показал ошибку массива (потому что @comments перечисляет массив комментариев пользователя). Мне нужно найти способ найти post_id для КАЖДОГО комментария. Тем не менее, когда я пытаюсь использовать что-то вроде

@post_id = @comments.each.post_id

Показывает ошибку, потому что не распознает 'post_id' как метод. Я хочу, чтобы он выводил все, что есть в столбце post_id для КАЖДОГО комментария.

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Вы идете об этом все неправильно. Идея состоит в том, чтобы использовать ассоциации, чтобы рельсы предоставили вам доступ. Вы должны использовать только find, чтобы получить самую лучшую запись. Rails заполнит ассоциации для вас.

def User
  has_many :posts
  has_many :comments
end

def Post
  belongs_to :user
end

Ваш код становится:

@user = User.find(params[:id])

# you can omit these and just use @user.posts and @user.comments in your view
@posts = @user.posts
@comments = @user.comments

Если вы хотите выводить что-то для каждого комментария, используйте цикл в вашем представлении

<div class="comments">
  <% @user.posts.each do |p| %>
    <div class="post">
      <%= p.body %>
    </div>
  <% end %>
</div>
1 голос
/ 25 ноября 2014
class User
has_many :posts
end

class Post
belonds_to :user
has_many :comments
end

class Comment
belongs_to :post
end



<h1>users contriller</h1>
@user = User.includes(:posts).where(:id => params[:id]).first
<h1>in posts view</h1>
<div class="comments">
<% @user.posts.each do |p| %>
 <div class="post">
 <%= p.name %>
 </div>
 <% end %>
 </div>
 <h1>in comment view</h1>
 <div class="comments">
 <% @user.posts.each do |p| %>
  <div class="post">
 <%= p.comments.body %>
 </div>
 <% end %>
 </div>
1 голос
/ 23 августа 2010

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

Если пользователь has_many публикует, а пост has_many комментирует, вы можете просто сделать.

user.posts

и

post.comments

Кроме того, похоже, что пользователь has_many комментирует, так что вы можете напрямую сделать

user.comments

Чтобы получить идентификатор поста из комментария, сделайте комментарий belongs_to пост, тогда вы можете сделать:

comment.post.id # or comment.post.name directly
0 голосов
/ 13 января 2012

Пост имеет много комментариев

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

Помните, что @user имеет все сообщения с комментариями.

Таким образом, чтобы получить идентификатор комментариев, перейдите по адресу @ user.each.post ({| post |

post.comment}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...