belongs_to :admin_user, :class_name => "User"
のようにbelongs_toに クラス名を書くのは具体的にどんなことをしたいときか教えてください。リファレンスを読んだのですがどう使うのかいまいち理解できません
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
Book モデル(クラス) と User モデル(クラス) があってこれを関連付ける際、通常は
ruby
1class Book 2 belongs_to :user 3end
とします。
belongs_to
は 1番目の引数を関連先のクラス名として扱いますので、引数の :user は
ruby
1:user.to_s.classify # => "User"
で変換され、無事 User モデル(クラス)と関連付きます。
さてここで、この関連を実際に使う場合を考えてみましょう。
ruby
1book.user
ではしっくりこず
ruby
1book.admin_user
の方がしっくりくるなぁと思ったとします。
book.admin_user
と書くには 関連名は admin_user にする必要があります。
ruby
1 belongs_to :admin_user
すると、先のとおり belongs_to
は 1番目の引数を関連先のクラス名として扱いますので
ruby
1:admin_user.to_s.classify # => "AdminUser"
という事で AdminUserモデル(クラス) との関連付けになります。
いやー。AdminUserモデル(クラス) じゃないんだよ モデル(クラス) は User のままでいいんだよ。。。。
(´・ω・`)ショボーン
Railsつかえねーなー。
という時に class_name:
オプションを使って
ruby
1class Book 2 belongs_to :admin_user, :class_name => "User" 3end
と class_name
を明示的に指定してあげる事により :admin_user => AdminUser という変換がスキップされ最初から関連先のモデル(クラス)は Userモデル(クラス) という事になり
ruby
1book.admin_user
で Userモデル(クラス) のオブジェクトを取得する事ができます。
has_one
, has_many
の class_name:
オプションも同じ意味です
質問のタイトルは「railsのbelongs toのclass_name:オプションの使い道」がより適切だと思います。
投稿2016/10/14 01:22
総合スコア1728
0
ベストアンサー
通常ですと、関連名から関連相手のクラスのオブェジエクト名を生成できるので、class_nameの指定は不要です。
admin_userなどの、デフォルト以外の任意の名前を関連名にしたい場合に使います。
そちらのコードを拝借した例で話すと、
ruby
1class Book < ActiveRecord::Base 2 belongs_to :admin_user, :class_name => "User" 3end
のようなBook
モデルがある時に、
ruby
1book = Book.first 2book.admin_user
のように使いたい時にはクラス名を別途指定する必要があるのです。
クラスネームを指定しない場合、User
モデルとのアソシエーションは以下のようになり、
ruby
1class Book < ActiveRecord::Base 2 belongs_to :user 3end
ruby
1book = Book.first 2book.user
のように使うことになります。
参考までに、
Railsガイドには、
関連名から関連相手のオブジェクト名を生成できない事情がある場合、:class_nameオプションを使用してモデル名を直接指定できます。
とあります。
投稿2016/10/13 14:36
編集2016/10/14 00:09総合スコア891
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。