我們希望實作以下目標:
我們希望實作以下目標。
- 能夠將 "專案 "與其他(多個)專案進行比較。
- 能夠將 "專案 "與其他(多個)專案進行比較。
- 在資料庫中保存比較參考。 。
在過去,我們通過在資料庫中存盤一個陣列來實作這一目標,如下所示:
t.string "comparisons", default: [], array: true
現在我們正在考慮使用另一個表 - 除非有更好的方法?
通常是這樣的:
我們已經有了這個表:
我們已經有了這個表。
| projects |
|-----------|
| id |name |
| 1 | abc |
| 2 | def |
| 3 | ggg |
| 4 | fff |
我們要創建另一個類似于這樣的表:
我們要創建另一個類似于這樣的表:
| project_comparisons |
|-------------------------------|
| id |專案_id | compared_id |
| 1 | 1 | 2 |
| 2 | 1 | 4 |
| 3 | 2 | 3 |
| 4 | 2 | 4 |
最后我們可以這樣做:
Project.find(1).project_comparisons.each do | x|
x.name
end
# Output:
'def'/span>
'ffff'
但是我們在關系設定中迷失了方向。
這就是我們目前所擁有的:
這就是我們目前所擁有的。
rails g model ProjectComparison project:/span>references compared:references
# 遷移檔案(已編輯)
create_table :project_comparisons do |t|
t.references :project, foreign_key: true
t.references :compared :compared
end
class Project
has_many :project_comparisons[/span]。
has_many :projects, through: :project_comparisons。
# ... 在這里,我認為我們需要在上面的行中加入一些東西?
end
class ProjectComparison
belongs_to :project[/span]。
end>
這樣做現在有了不正確的輸出。 如果我們現在遍歷這個例子:
Project.find(1).project_comparisons.each do |x|
x.name
end
# Output:
# aaa
# aaa # aaa
它應該是'def'和'ff'
我能否以某種方式指定我們希望'comparent_id'獲得正確的Project,或者我們在這里走錯了路?
uj5u.com熱心網友回復:
那像這樣的事情呢:
create_table :project_comparisons do |t|
t.references :project, foreign_key: true
t.references :compared, foreign_key: { to_table: 'projects' }
end end
class Project
has_many :project_comparisons[/span]。
has_many :compared, through: :project_comparisons.
結束。
class ProjectComparison
belongs_to :project[/span]。
belongs_to :compared, class_name: "Project", foreign_key: "compared_id".
結束。
Project.find(1).compared.each do |x|<
x.name
end |x| x.name
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/313854.html
標籤:
上一篇:試圖為一個特殊的游戲獲取評論
