2015-11-25 79 views
0

我試圖訪問我的用戶對象中包含的屬性。 我的用戶型號爲has_many: posts。在控制器中,我將如何訪問這些帖子?我會在模型中創建一個方法嗎?如何訪問模型中的變量

def posts 
    @posts = Post.find(User_id: params[:id]) 
end 

或者我可以直接訪問用戶的帖子。 User.posts因爲我目前居住在控制器中,控制器是否知道當前選擇的模型?或者我必須再次提取信息?

回答

2

您可以在數據庫中查詢所有職位與特定USER_ID,類似這樣的:

@posts = Post.where(user_id: params[:id]) 

或者,你可以先找到用戶,然後獲取與該用戶相關聯的所有帖子,這樣的:

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

假設你的id在params中是你的用戶的id,你可以使用user = User.find(params[:id])讓用戶和@posts = user.posts獲得這個用戶的所有帖子。

0

所以,這不是你在哪裏,而是你在說什麼。

我敢肯定,你所熟悉的關係......

當你有關係,這意味着你可以從另一個得到一個關係,通過它們之間存在任何關聯。

如果我是我父親的兒子,那麼你可以通過檢查我父親的孩子直接找到我。 (你不必讓所有的孩子在村裏第一個)

所以,把我所有的故事上述在一起,你PostUser之間的關聯,可以隨時撥打user.postsuser是一個實例User)和post.userpostPost的一個實例)

0

Ruby on Rails指南有關於關聯的部分,這正是您想要的。它在這裏:http://guides.rubyonrails.org/association_basics.html

簡而言之,因爲您在用戶模型中添加了一個關聯到多個帖子記錄,Rails將在您的用戶模型中構建一個名爲posts的輔助方法。您可以使用它來訪問與該用戶關聯的所有帖子。

當您創建帖子時,帖子記錄需要有一個名爲user_id的列。這將提供用戶和發佈模型之間的「物理」鏈接。您可以從用戶訪問的職位,像這樣:

user.posts each do |post| 
    # do something with post.content 
end 

拿到賽在帖中收集一些條件的職位,你可以查詢這樣的:

posts = user.posts.where(:something => 'matches criteria') 

如果你知道,只有一個職位,匹配標準,你可以這樣做:

post = user.posts.where(:something => 'matches criteria').first 

該post模型還需要一個belongs_to:用戶關聯。 (該belongs_to的會生成一個名爲用戶在崗模型,然後你可以用它來從後訪問用戶記錄一個輔助方法。)例如:

user_email = post.user.email 

用戶記錄不需要,因爲Rails中POST_ID列知道user.post引用了發佈表並使用user_id自動生成查詢。

無論如何,我鏈接到上面的指南會給你所有你需要的信息,也可以。