1

比方說,我有一個用戶模型和一個電影模型以及表格來存儲它們。比方說,我想通過添加名爲watchlist_movies的第三個表來簡單地將user_id映射到movie_id來添加監視列表功能。如何獲得Rails關聯使用某個名稱訪問不同名稱的模型?

我現在要添加一個watchlist_movie模型。我想能夠用user.watchlist_movies查詢ActiveRecord並獲取電影對象的集合。到目前爲止,我已經試過(在user.rb)

has_many :watchlist_movies 

has_many :movies, through: watchlist_movies 

的第一個成果,user.watchlist_movies返回的記錄,第二個將在返回的電影記錄的集合user.movi​​es。本質上,我想要的是讓user.watchlist_movies返回一組電影記錄,所以我希望第一個關係中定義的訪問返回第二個關係的內容。我該怎麼做呢?

回答

1

您在這裏正確定義了關係,但您可能有一個您的期望不符合Rails如何處理的問題。如果您的結構是通過WatchlistMovie(這是一個簡單的連接模型)與用戶相關的結構,那麼您處於正確的軌道上。

記住,你可以打電話給你想你的人際關係什麼:

has_many :watchlist_movie_associations, 
    class_name: 'WatchlistMovie' 

has_many :watchlist_movies, 
    class_name: 'Movie', 
    through: :watchlist_movie_associations 

我反對這項建議,因爲它違背了的ActiveRecord如何喜歡事物命名的糧食。如果它現在只是錯誤的,這是可以理解的,但如果你擁抱風格而不是對抗它,你將擁有一個更加一致和易於理解的應用程序。

+0

所以我不清楚你認爲建立這種關係的最佳方式是什麼。你是否說過has_many:電影,通過:watchlist_movies是理想的? –

+0

你在原始問題中有什麼是教科書的方式,除非你有很好的理由,否則我會避免改變名字。個人偏好,當它與Rails約定相矛盾時,通常應該被忽略。一致性導致未來意外減少。您現在可能會覺得很奇怪,但大多數Rails開發人員發現您的代碼與預期完全一致,這也是他們的做法。調用'user.watchlist_movies'並獲得一個Movie模型讓一個不熟悉命名約定的人非常困惑。 – tadman

+0

夠公平的。如果我走這條路線,我是否應該有一個watchlist_movies模型?難道我沒有沒有模型的連接表並使用has_and_belongs_to_many關聯? 此外,我不想使用user.movi​​es的原因之一是,他們將來可能會有其他列表。他們也有通過其他協會的電影。 –

相關問題