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 endend
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 endend
で、こう。
class Status < ApplicationRecord self.primary_key = :status_idend
class Account < ApplicationRecord self.primary_key = :account_idend
あ、Statusに t.references :account, null: false かいてないや。……まあそういう感じで。
class Status < ApplicationRecord self.primary_key = :status_id
belongs_to :account, primary_key: :account_idend
こっちはこうか。
@noellabo こん!のえるさん🐰🐰素敵な木曜日を✨️✨️🐰
@risahana こん! 🐰 🐰 もう木曜日なんだねえ
様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。
こうかな。
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