dbっていえば、

from statuses join accounts on statuses.account_id = account.id

ってonで書くものだってずっと思ってたんだけど、

primaryキーを全部idじゃなくて、それぞれstatus_idとかaccount_idにする設計にしておけば、

from statuses join accounts using(account_id)

で済んじゃうんだね、って最近知ったのよ。便利ね。

こうかな。

class CreateStatus < ActiveRecord::Migration[7.1]
def change
create_table :statuses, id: false do |t|
t.integer :status_id, null: false, primary_key: true

t.timestamps
end

add_foreign_key :statuses, :accounts, column: :account_id , primary_key: :account_id, on_delete: :cascade
end
end

class CreateAccount < ActiveRecord::Migration[7.1]
def change
create_table :accounts, id: false do |t|
t.integer :account_id, null: false, primary_key: true

t.timestamps
end
end
end

で、こう。

class Status < ApplicationRecord
self.primary_key = :status_id
end

class Account < ApplicationRecord
self.primary_key = :account_id
end

あ、Statusに t.references :account, null: false かいてないや。……まあそういう感じで。

フォロー

class Status < ApplicationRecord
self.primary_key = :status_id

belongs_to :account, primary_key: :account_id
end

こっちはこうか。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。