На нашем сайте есть страница профиля пользователя, на которой мы хотим отобразить все микросообщения, относящиеся к профилю этого пользователя.
В нашей таблице микросообщений у нас есть столбец own_to_id и user_id (определяет, от кого микросообщение)
Мы пытаемся сопоставить own_to_id с user_id. Это делается для того, чтобы при просмотре профиля отображались только микросообщения, в которых отношение own_to_id совпадает с user_id просматриваемого профиля. Как мы можем это сделать?
class Micropost < ActiveRecord::Base
attr_accessible :content, :belongs_to_id
belongs_to :user
validates :content, :presence => true, :length => { :maximum => 240 }
validates :user_id, :presence => true
default_scope :order => 'microposts.created_at DESC'
# Return microposts from the users being followed by the given user.
scope :from_users_followed_by, lambda { |user| followed_by(user) }
private
# Return an SQL condition for users followed by the given user.
# We include the user's own id as well.
def self.followed_by(user)
following_ids = %(SELECT followed_id FROM relationships
WHERE follower_id = :user_id)
where("user_id IN (#{following_ids}) OR user_id = :user_id",
{ :user_id => user })
end
end
UsersController:
class UsersController < ApplicationController
before_filter :authenticate, :only => [:index, :edit, :update, :destroy]
before_filter :correct_user, :only => [:edit, :update]
before_filter :admin_user, :only => :destroy
def index
@title = "All users"
@users = User.paginate(:page => params[:page])
end
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(:page => params[:page])
@title = @user.name
@micropost = current_user.microposts.build(params[:micropost])
end