2013-05-10 149 views
0

我是Rails的新手,基本上和其他人一樣,在我的腦海裏也有同樣的問題。我想鏈接兩個表。但我做不到。幫助我o'mighty stackoverflow用戶。Rails has_many belongs_to associations

用戶等級:

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 

在終端,我登錄到軌控制檯,並說:

@allusers = Users.all 
@allposts = Users.Posts.all 

,並讓和錯誤,有沒有任何其他方法或Ruby代碼鏈接這些表?

+0

有您在數據庫中創建的兩個之間的鏈接表? – 2013-05-10 11:39:21

+2

如果它是1:n關聯,則不需要額外的表。 foreign_key位於posts table =>請參閱Post model attr_accessible:user_id =>以便表格可以正常工作。 – Mattherick 2013-05-10 11:42:29

回答

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 

你可以閱讀更多關於查詢的位置:

UPDATE

@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方法=>返回當前登錄的用戶,你可以簡單的拿他的職位有:

@posts = current_user.posts 
+0

但是,如果我做用戶。first.posts並獲得帖子,我怎麼能得到關於哪個用戶寫這篇文章的信息?在帖子中有一個user_id屬性btw – Yagiz 2013-05-10 11:48:11

+0

我更新了我的答案。欲瞭解更多信息,請查看鏈接,瞭解活動記錄的工作原理。 – Mattherick 2013-05-10 11:51:13

+0

謝謝,但你誤會了。假設我在控制器中使用了User.all.posts(不知道語法是否正確),並在「顯示所有帖子」頁面中顯示新聞和相應作者的詳細信息。我怎樣才能做到這一點? – Yagiz 2013-05-10 11:54:04

3
@allposts = Users.Posts.all 

這必須

@allposts= Post.all 

如果你希望某個特定用戶的帖子,創建一個用戶,然後執行:

User.first.posts 

如果你想獲得的所有帖子和屬於他們的用戶信息不需要額外查詢,請嘗試:

@allposts= Post.include(:user).all 

這種方式@allposts.first.user不會導致額外的查詢。

1
@allusers = User.all 

收集所有帖子

@allposts = [] 

@allusers.each do |user| 
@posts = user.posts 
    @posts.each do |post| 
     @allposts << post 
    end 
end 

爲了收集特定用戶的帖子(在這裏顯示了第一用戶)

@allposts = User.first.posts 
+0

不容易複雜,並在你的例子allposts和allpost實例變量是不一樣的。你的第一個崗位是簡單的Post.all,你的第二個崗位是正確的,但只返回來自第一個用戶的帖子,而不是帖子表中的所有帖子。 – Mattherick 2013-05-10 11:56:22

+0

是不是太耗費資源?有沒有更有效的方法在鐵軌?或者它是唯一的方法 – Yagiz 2013-05-10 11:58:49

+0

檢查我的答案中的鏈接.. – Mattherick 2013-05-10 12:02:59