【ruby】【rails】外部参照キーで1:多の関連付けを行う方法
今回は、
外部参照キーでuser_id以外のデータを取ってくる方法を
取り上げたいと思います。
例えば
g08m11_shopsというテーブルがあり、g08m11_usersというテーブルと
関連があった場合、
railsの書き方であればshops側に「g08m11_user_id」というキーを持っていれば
各モデルにhas_many、belongs_toで関連付けを行うことが出来ます。
しかし、
今回の場合は「g08m11_user」の定義が混同してしまう(店舗の中のユーザなのかどうなのか)
ため、「updated_by_id」という外部参照キーを用いて
g08m11_usersとg08m11_shopsの関連性を作るというのがそもそものきっかけです。
g08m11_shop.rb
class G08m11Shop < ActiveRecord::Base belongs_to :updated_by , :foreign_key => :updated_by_id, :class_name => "G08m11User"
g08m11user.rb
class G08m11User < ActiveRecord::Base has_many :g08m11_shops
shops.contlloer.rb
def create @shop = G08m11Shop.new(shop_params) @shop.updated_by = current_user respond_to do |format| if @shop.save format.html { redirect_to shop_path(@shop), notice: t("messages.complete", action: t( ["titles", controller_name, action_name].join("."))) } format.json { render action: 'show', status: :created, location: @shop } else format.html { render action: 'new' } format.json { render json: @shop.errors, status: :unprocessable_entity } end end end
ポイントは
@shop.update_byというインスタンスに
現在ログイン中のユーザー情報を取り込んでいる箇所です。