0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】 has_manyなどの関連付けをprivateにする方法

Last updated at Posted at 2019-12-20

#はじめに
モデル間で関連付けを行うと、インスタンス経由で関連する情報を引っ張っこれるようになる。
例えば、Article has_many Commentsの関係にすると、下のようにCommentの情報を持ってこれる。

[1] pry(main)> Article.first.comments
=> [#<Comment:0x00007fb68c8b0ae8...

これらは基本 public になっていて、モデル外部からも利用できるようになっている。

しかしある時、関連付けてるけど外部からは使いたくないなあと思いまして。
これをprivateにする方法がないか探してたらあったので共有。

privateメソッドで引数に指定

article.rb
class Article < ApplicationRecord
  has_many :comments
  private :comments
end

privateにさせたいメソッドを、privateメソッドの引数にするだけでok。
ちゃんとprivateになっているかコンソールで実行してみた。

[1] pry(main)> Article.first.comments
NoMethodError: private method `comments' called for #<Article:0x00007f8e476ddfa8>

うん。大丈夫そうだね。でもあまり使うことはなさそう?

参考

stack overflowにも同じような質問があった。
https://stackoverflow.com/questions/12131810/private-association-in-rails
引数ありのprivateメソッド
https://ref.xaio.jp/ruby/classes/module/private

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?