#はじめに
モデル間で関連付けを行うと、インスタンス経由で関連する情報を引っ張っこれるようになる。
例えば、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