2016-08-16 75 views
0

這裏是我目前的問題的一些信息:Rails 4 has_many關聯兩次在同一模型

我有兩個模型,用戶和活動。用戶可以創建活動併爲其添加書籤。

我目前有一個工作設置,允許用戶創建活動,我正在修改它也能夠將它們加入書籤,但沒有成功。

user.rb:

class User < ActiveRecord::Base 
    ... 
    has_many :activities 
    ... 
end 

activity.rb

class Activity < ActiveRecord::Base 
... 
belongs_to :user 
... 
end 

我可以做這樣的事情?

class User < ActiveRecord::Base 
has_many :activities 
has_many :bookmarks, :through => :activities 
end 

是一個many_to_many與'inbetween'模型更合適的方法嗎?

對於上述做法,當我試圖檢索用戶的書籤,這是我得到:

ActiveRecord::HasManyThroughSourceAssociationNotFoundError (Could not find the source association(s) "bookmark" or :bookmarks in model Activity. 
+0

你能形容更多嗎?發生了什麼,有什麼錯誤信息? –

+0

是的,例如,當我使用上述方法處理問題並嘗試檢索用戶的書籤時,出現此錯誤: 「ActiveRecord :: HasManyThroughSourceAssociationNotFoundError(無法找到源關聯」書籤「或:書 標記在模型活動。試試'has_many:書籤,:通過=>:活動,:來源=>'。「 謝謝你的回覆 – fmlopes

+0

當前模式如何,'活動'有很多'書籤「? –

回答

0

是的,你可以做

在你/app/models/activity.rb文件中添加belongs_to :bookmark,你可以如果您想使用has_many :users, through: :activitiesbookmarks.rb,請添加belongs_to :user

如果你沒有書籤模型

多對多的關係需要可用於連接兩個型號的表。這裏用戶和活動是兩個模型,並且爲了建立多對多的關係,那麼必須存在另一個表,以便它們可以相關。這裏要連接這兩個表,您可以製作和使用user_activity表或書籤表以及與此表關聯的模型。

之後,您可以使用您正在關注的方法。 享受

+0

這是一種方法,我試圖做所有事情都沒有書籤模型,有什麼建議嗎?或者我應該堅持這個解決方案嗎? – fmlopes

+0

已經針對您的問題更新了答案。 –

0

我試圖做的事情的方式是無效的,它不起作用。像Pradeep Sapkota暗示,對這類問題的解決方案是非常簡單,如下:

User.rb

class User < ActiveRecord::Base 
has_many :activities 
has_many :bookmarks 
end 

Bookmark.rb(新文件)

class Bookmark < ActiveRecord::Base 
belongs_to :user 
belongs_to :activity 
end 

Activity.rb

class Activity < ActiveRecord::Base 
belongs_to :user 
has_many :bookmarks 
end 

我們還需要創建一個新的遷移來添加書籤表

class CreateBookmarks < ActiveRecord::Migration 
def change 
    create_table :bookmarks do |t| 
    t.belongs_to :user, index: true 
    t.belongs_to :activity, index: true 

    t.timestamps 
    end 
end 
end 
相關問題