下記のような場合、どちらも「ユーザーのID」であるのに違いはないと思うのですが、片方は「user_id」と書き、片方は「user.id」と書きます。
この書き分けは、どのようなルールに基づくものなのでしょうか?
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
この書き分けは、どのようなルールに基づくものなのでしょうか?
中には「そう作られているから」以上の理由が存在しないものもありますが、できるだけそういう考え方をしてはいけません。理詰めで考えましょう。
セッションのキーには、通常シンボルが使われます。なので、ドット入りのシンボルを使ってsession[:"user.id"]
のようにしても構わないのですが、これは書きにくいので、シンボルリテラルを素直に書けるsession[:user_id]
とアンダーバー区切りにするのが一般的です(session[:user.id]
では、「:user
に対するメソッドの呼び出し」と解釈されて正しく動きません)。
user.id
は、書いての通り「user
オブジェクトのid
メソッドの呼び出し」です。
投稿2020/06/17 04:03
編集2020/06/17 04:03総合スコア146018
0
まとめてしまうと
対象が
user_id
という一つのインスタンスuser
というインスタンスの属性(id
)
なのかの違いです。
RailsというかActiveRecordの仕様(便利機能)により
belongs_to
関連付けによってuser_id
フィールドを読み取り検索しuser
という仮想的な属性を作成します。
そのため
ruby
1@recipe.user = current_user
と記述した場合でも、@recipe.user_id
にcurrent_user.id
が保存されるので問題ありません。
さらに、Recipe
モデルがUser
モデルと適切な関連付けがなされていた場合
ruby
1@recipe = current_user.recipes.build(recipe_params)
が可能です。
投稿2020/06/17 05:01
総合スコア15149
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
user.id
は user の id です。
それに対し この場合の :user_id
は user.id をしまう箱につけた名前ですので、じつは何でも良いのです。:tokyo2020
でも :covid_19
でも :ユーザーのID
でも、文法エラーにならないし、動作も問題ないです。
但し、良い子のプログラマーとしては「何を表しているかわかる命名」、「誤解を与えない命名」が求められます。ですので、:ユーザーのID は許容されるかもですが他のは良い子がする命名では無いです。
だめな場合もあります。
関連付けのkeyとしての user_id というcolumn名は、そうでない命名でも動かすことはできますが、余分な宣言が必要になるので、だめではないですが薦めません。
投稿2020/06/17 13:17
総合スコア23567
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 21:38 編集
2020/06/17 22:47 編集
2020/06/20 02:55
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/17 23:41 編集