2016-03-02 40 views
0

一如既往,當涉及到幫助時,您無法替代。我遇到了一個新問題。如何根據另一個數組中的值向數組中的每個ActiveRecord添加新屬性?

我有兩個模型。

User(id: integer) 
Follower(id: integer, source_user_id: integer, target_user_id: integer) 

我通過get params[:user_id]輸入。我需要創建包含is_following => true/false的記錄數組。當有跟隨當前記錄source_user_id = params[:user_id]

is_following應該是假的時,有沒有存在此參數

什麼是最有效的方式做到這一點跟隨記錄

is_following應該是真的嗎?

謝謝!

+0

可以顯示一些示例數據,問題不說清楚 – nickcen

+0

我找的用戶列表,指定是否特定用戶params [:user_id]跟隨每個或不是。 – nebulus

回答

-1

用戶模型修改

has_many :followers, class_name: 'Follower', foreign_key: :target_user_id 

def is_followed? follower_id 
    followers.where(:source_user_id => follower_id).exists? 
end 

和API

users = users.map {|user| { user: user, is_following: user.is_followed?(params[:user_id]) } } 
1

編輯以反映你想要什麼的澄清。

User模型,稱爲is_following內定義一個輔助函數:現在

def is_following? 
    !Follower.where(source_user_id: self.id).empty? 
end 

,您可以使用地圖的方法來創建一個數組。你必須有散列的數組,因爲用戶沒有任何一種屬性的存儲布爾值:

User.all.map { |user| {user: user, is_following: user.is_following? } } 
+0

我不是在尋找追隨者的名單。我正在尋找一個用戶列表,指定一個特定的用戶是否跟隨每個用戶。 – nebulus

+0

因此使用第二種解決方案 – Barnaby

+0

我不明白它的作用。我需要一個用戶對象列表,第二個列出了一個Follower對象列表。 – nebulus

2

快速回答您的用戶模型添加一個方法:

class User < ActiveRecord::Base 
    has_many :followers, foreign_key: :source_user_id 

    def is_following? follower_id 
    follower_ids.include? follower_id.to_i 
    end 
end 

然後:

user.is_following? params[:user_id] 

該協會是根據你的問題假設。 請注意,這是對您的問題的簡短回答。您可能需要重新設計您的關聯,將方法移至Decorator(取決於您的用例),並可能優化查詢。

+0

謝謝,但是隻有一些你的代碼是正確的。 – nebulus

+1

首先,答案更傾向於給你一個想法,因爲你的問題沒有包含真正的代碼片段。請用有效的代碼片段重新提出您的問題,以便參考。 –

+0

感謝您的幫助!但是,其他用戶向您提供信用是不公平的。他也給了一點點。 – nebulus

相關問題