我正在尝试访问我的用户对象中包含的属性。
我的用户模型has_many: posts
。在控制器中,我如何获得对这些帖子的访问权限?我会在模型中创建一个方法吗?
def posts
@posts = Post.find(User_id: params[:id])
end
或者我可以直接访问该用户的帖子。 User.posts
由于我目前居住在控制器中,控制器是否知道当前所选的模型?或者我是否必须再次提取信息?
答案 0 :(得分:2)
您可以在数据库中查询具有特定user_id的所有帖子,如下所示:
@posts = Post.where(user_id: params[:id])
或者,您可以先找到该用户,然后获取与该用户关联的所有帖子,如下所示:
user = User.find(params[:id])
@posts = user.posts
答案 1 :(得分:1)
假设您在params中的ID是您的用户的ID,您可以使用user = User.find(params[:id])
获取用户,@posts = user.posts
获取此用户的所有帖子。
答案 2 :(得分:0)
所以,这不是关于你在哪里,而是关于你在呼唤什么。
我确信你熟悉关系...
当你有人际关系时,这意味着你可以通过他们之间存在的任何关联从另一个关系中找到一个关系。
如果我是我父亲的儿子,那么你可以通过检查我父亲的孩子直接找我。 (你不一定要先把村里的所有孩子都带到村里)
因此,将我的所有故事放在一起,通过Post
和User
之间的关联,您始终可以调用user.posts
(user
作为{User
的实例1}})和post.user
(post
是Post
的实例)
答案 3 :(得分: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
帖子模型还需要belongs_to:用户关联。 (belongs_to将在post模型中生成一个名为user的辅助方法,然后您可以使用该方法从帖子中访问用户记录。)例如:
user_email = post.user.email
用户记录不需要post_id列,因为Rails知道user.post引用post表并使用user_id自动生成查询。
无论如何,我上面链接的指南将为您提供所需的所有信息,以及更多信息。