LoginSignup
0
0

More than 5 years have passed since last update.

【Rails】関連に同一モデルを含む場合

Posted at

これは何?

ユーザーのブロックリスト管理をしようとしたが、
ブロックリストを管理するモデルで二つのユーザーモデルを関連させなければならず、
その時に行き詰まってしまったのでここに記します。

何をしたいのか

user, user_block二つのモデルを利用して、
user_block内で「誰が」「誰を」ブロックしたのかを管理したい。

モデル作成

bundle exec rails g model User name:string

User
- name

bundle exec rails g model UserBlock from:references to:references

この時、migrationファイルにforeign_keyが自動的に付与されるが、そちらは削除する。

UserBlock
- from_id
- to_id

関連

モデルができたので、from_idto_idの二つをUserと関連させていく。

user.rb
has_many :user_blocks, foreign_key: :from_id
user_block.rb
belongs_to :from, class_name: 'User'
belongs_to :to, class_name: 'User'

呼び出し

users_controller.rb
before_action :set_user

def block
 blocked = current_user.user_blocks.where(to: @user)
 blocked || current_user.user_blocks.create(to: @user)
end

def unblock
 current_user.user_blocks.where(to: @user).destroy
end

private
def set_user
 user = User.find(params[:id])
end

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0