2011-07-19 50 views
0

這是我的代碼:如何從current_user.friends狀態+限量10個狀態

@current_user_statuses = current_user.statuses.limit(10) 

@friends_statuses = current_user.friends.collect(&:statuses) 

if current_user.friends.collect(&:doweets)[0].any? 
    @friends_statuses = current_user.friends.collect(&:statuses)[0] 
end 

@statuses = (@current_user_statuses + @friends_statuses).sort_by{ |d| - d.created_at.to_i 

我想讓它像這樣:

@current_user_statuses = current_user.statuses.limit(10) 

@friends_statuses = current_user.friends.statuses.limit(10)  

@statuses = (@current_user_statuses + @friends_statuses).sort_by{ |d| - d.created_at.to_i 

但是當我做,我得到錯誤...

我該怎麼辦?

我的模型:

友誼模式:

belongs_to :user 
belongs_to :friend, :class_name => "User", :foreign_key => "friend_id" 

def self.are_friends(user, friend) 
    return false if user == friend 
    return true unless find_by_user_id_and_friend_id(user, friend).nil? 
    return true unless find_by_user_id_and_friend_id(friend, user).nil? 
    return false 
end 

def self.request(user, friend) 
    return false if are_friends(user, friend) 
    return false if user == friend 
    f1 = new(:user => user, :friend => friend, :status => "pending") 
    f2 = new(:user => friend, :friend => user, :status => "requested") 
    transaction do 
    f1.save 
    f2.save 
    end 
end 

def self.accept(user, friend) 
    f1 = find_by_user_id_and_friend_id(user, friend) 
    f2 = find_by_user_id_and_friend_id(friend, user) 
    if f1.nil? or f2.nil? 
    return false 
    else 
    transaction do 
     f1.update_attributes(:status => "accepted") 
     f2.update_attributes(:status => "accepted") 
    end 
    end 
    return true 
end 

def self.reject(user, friend) 
    f1 = find_by_user_id_and_friend_id(user, friend) 
    f2 = find_by_user_id_and_friend_id(friend, user) 
    if f1.nil? or f2.nil? 
    return false 
    else 
    transaction do 
     f1.destroy 
     f2.destroy 
     return true 
    end 
    end 
end 

用戶模型:

 has_many :doweets 
    has_many :friendships 
    has_many :friends, 
      :through => :friendships, 
      :conditions => "status = 'accepted'" 

    has_many :requested_friends, 
      :through => :friendships, 
      :source => :friend, 
      :conditions => "status = 'requested'", 
      :order => :created_at 

    has_many :pending_friends, 
      :through => :friendships, 
      :source => :friend, 
      :conditions => "status = 'pending'", 
      :order => :created_at 

謝謝!

編輯:

我的錯誤: NoMethodError:未定義的方法`doweets'爲#

+0

發表您的日誌與適當的錯誤。 – s84

+0

當然...增加了錯誤: – gal

+0

NoMethodError:未定義的方法'doweets'爲# gal

回答

0
ids = [current_user.id, *current_user.friends.map(&:id)] 
@statuses = Status.where(:user_id => ids).limit(10).order("created_at DESC") 

就是這樣