Как мне вызвать все комментарии для поста (в данном случае, тренировки), где workout.user_id == current_user.id? - PullRequest
0 голосов
/ 30 ноября 2010

Я создал приложение Ruby on Rails, где пользователи могут записывать свои тренировки, а другие пользователи могут комментировать эти тренировки.Я использую ресурс Dashboard для сбора информации для current_user.Я пытаюсь отобразить последние комментарии о тренировках current_user, но не могу понять, как это сделать правильно.Я думаю, что мне нужен named_scope, в котором я пока не очень хорош.

По сути, я хочу, чтобы приложение циклически перебирало таблицу комментариев, но возвращало комментарии только в Workouts, где workout.user_id == к current_user.id.

/ views / dashboard / index.html.erb

<% @comments.each do |comment| %> 
  <%= link_to (comment.user.username), comment.user %><br/>
  <%= time_ago_in_words(comment.created_at) %><br/>
  <%= link_to (comment.workout.title), comment.workout %><br/>
<% end %>

dashboard_controller.rb

def index
  @comments = Comment.all(:order => "created_at DESC", :limit => 10)
  @workouts = Workout.all(:order => "created_at DESC", :limit => 10) 
end 

* Я не думаю, что мне нужна строка @workouts в них, но все равно вставьте ее.

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

Если вы правильно настроили модели, вот что вы можете попробовать:

class Comment < ActiveRecord::Base
  named_scope :for_user, lambda { |user| { :joins => :workout, :conditions => ["workouts.user_id = ?", user.id] } }
  named_scope :order, lambda { |order| { :order => order } }
  named_scope :limit, lambda { |limit| { :limit => limit } }
end

class DashboardsController < ApplicationController
  def index
    @comments = Comment.for_user(current_user).order("created_at DESC").limit(10)
  end
end
0 голосов
/ 30 ноября 2010

Правильный способ сделать это - установить связь между вашими моделями, то есть комментариями и тренировками.Каждая тренировка может иметь много комментариев, и каждый комментарий относится к тренировке.Итак:

class Comment < ActiveRecord::Base
      belongs_to :workout

      # rest of the model definitions
end

и

class Workout < ActiveRecord::Base
      has_many :comments

      # rest of the model definitions
end

Как только вы настроите это так, вы можете позвонить:

<% @workout.comments do |comment| %> 
   <!-- print comment here -->
<% end %>

Вы можете последовать примеру здесь .

...