2016-12-15 110 views
0

在我的Rails項目,我想有這樣的結構:軌,模特協會,兒童屬於父母和HAS_ONE父母關係

的論證有很多爭論。

論證屬於辯論。

的參數可以有一個論證(一個又一個,一個新的)

我的模型可能是這樣的:

class Argument < ApplicationRecord 
    belongs_to :argumentation 
    has_one :argumentation 
end 

class Argumentation < ApplicationRecord 
    belongs_to :argument 
    has_many :arguments 
end 

這裏一個例子,我多麼希望它應該工作:

稱爲「康德」的論證有三個參數「a」,「b」和「c」。

論證「c」有一個名爲「形而上學」的論證。

稱爲「形而上學」的論證有兩個論點「d」和「e」。

依此類推。

這是我的問題:

  1. 這是聯想甚至有可能和推薦?

  2. 有沒有更好的方法來做到這一點?

回答

0

這種關聯是否可能並值得推薦?

是的,這是可能的。你只需要正確設置它。

首先,確保您使用2個不同的關聯名稱。

class Argument < ApplicationRecord 
    has_one :argumentation 
    belongs_to :parent_argumentation, class_name: 'Argumentation' 
end 

接着,在上述的關聯,滑軌預計,在參數表中的parent_argumentation_id列,以便補充一點。

最後是在論證模型

class Argumentation < ApplicationRecord 
    belongs_to :argument 
    has_many :arguments, foreign_key: :parent_argumentation_id 
end 

申報協會既然你也有一個belongs_to協會宣佈在這裏,你需要在你的議論表有一個argument_id列。

提示:使用inverse_of

爲了更容易閱讀,使之更有效率,建立了inverse_of選項。

class Argument < ApplicationRecord 
    has_one :argumentation, inverse_of: :argument 
    belongs_to :parent_argumentation, class_name: 'Argumentation', inverse_of: :arguments 
end 

class Argumentation < ApplicationRecord 
    belongs_to :argument, inverse_of: :argumentation 
    has_many :arguments, foreign_key: :parent_argumentation_id, inverse_of: :parent_argumentation 
end 
0

您不需要編寫has_one :argumentation,因爲它已經是一對多的關係。所以你的模型應該看起來像這樣。

class Argument < ApplicationRecord 
    belongs_to :argumentation 
end 

class Argumentation < ApplicationRecord 
    has_many :arguments 
end 

這意味着每個參數只會有一個參數。這就是一對多關係的作用。所有參數將只有一個它所屬的argumention_id

+0

我不確定,如果你看到,我要做什麼:每個參數都可以有一個論證(另一個論點,不同於父項)。 – Metaphysiker

+0

對不起,我誤解了你的問題。 –