我是Rails的新手,基本上,和其他人一样,在我的脑海中也有同样的问题。我想将两个表相互链接。但我不能这样做。帮助我强大的stackoverflow用户。
用户类:
class User < ActiveRecord::Base
attr_accessible :password, :username, :oauth_token, :provider, :uid, :oauth_expires_at, :picture, :email, :name, :location, :gender, :updated_at, :is_admin
has_many :posts
end
帖子课程:
class Post < ActiveRecord::Base
attr_accessible :details, :title, :user_id, :picture
belongs_to :user
end
在终端中,我登录rails控制台并说:
@allusers = Users.all
@allposts = Users.Posts.all
它给出了错误,是否还有其他方法或Ruby代码来链接这些表?
答案 0 :(得分:5)
这取决于你想要的结果:
@allusers = User.all # returns all users of the users table
@allposts = Post.all # returns all posts of the posts table
@user = User.first # returns first user of the users table
@posts = @user.posts # returns all posts of the first user of the posts table
@posts = User.first.posts # also returns all posts of the first user of the posts table
您可以在此处阅读有关查询的更多信息:
<强>更新强>
@posts = User.where(:id => 123).first.posts # returns all posts of the user with the id 123. => all posts of the posts table which have the user_id 123 will be returned.
如果你有current_user方法=&gt;返回当前登录用户,您可以通过以下方式简单地获取帖子:
@posts = current_user.posts
答案 1 :(得分:3)
@allposts = Users.Posts.all
这需要
@allposts= Post.all
如果您想要特定用户的帖子,请创建一个用户,然后执行以下操作:
User.first.posts
如果您想获取所有帖子以及属于他们的用户信息而不进行额外查询,请尝试:
@allposts= Post.include(:user).all
这种方式@allposts.first.user
不会导致额外的查询。
答案 2 :(得分:1)
@allusers = User.all
收集所有帖子
@allposts = []
@allusers.each do |user|
@posts = user.posts
@posts.each do |post|
@allposts << post
end
end
收集特定用户的帖子(此处显示第一位用户)
@allposts = User.first.posts