

親テーブルにitem_id、子テーブルにもitem_idを持ちitem_idをキーとして

親テーブルhas_many子テーブル  
子テーブルbelongs_to親テーブル

のような1対多のrelationを組みたい


CC BY-SA 3.0
2017-11-08T12:44:54.883
39419
2017-11-09T01:07:39.810
20544
question
ruby-on-rails rails-activerecord
railsでtable+_id以外でrelationを組みたい


親テーブル：Parent、子テーブル：Childとします。  
親のitem_idは、親と子の関連に関係ないmodelのidか何かとして、ID名とclassの紐付けがrailsのルールから外れてた場合の解決方法を尋ねられてると解釈して書きます。

[code]

    $ rails g model Parent item_id:integer
    $ rails g model Child item_id:integer
    $ rails db:migrate
    
[/code]

Parent、Child両modelを作ったら、以下のような関連を作れば良いと思います。

app/models/parent.rb

[code]

    class Parent < ApplicationRecord
      has_many :children, class_name: "Child", foreign_key: :item_id
    end
    
[/code]

app/models/child.rb

[code]

    class Child < ApplicationRecord
      belongs_to :item, class_name: "Parent"
    end
    
[/code]

`rails c`で確認するとこんな感じ。

[code]

    > Parent.create()
    > 5.times{Child.create(item_id: 1)}
    > Parent.first.children
    > Child.all.map{|c|c.item}
    
[/code]

* * *

Parent側のhas_manyのclass_nameは、childrenという名前からChildだと連想できるので不要なんですが、has_manyにおいても関連名とクラス名がルールから外れていた場合でもclass_nameを定義することで解決できるよという参考まで。。。


CC BY-SA 3.0
2017-11-09T01:07:39.810
39435
2017-11-09T01:07:39.810
2383
39419
answer