質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

464閲覧

【rails】どのタイミングでdeviseのcurrent_userヘルパーを使いますか?

YousukeTanaka

総合スコア79

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

1グッド

1クリップ

投稿2018/05/02 05:20

編集2018/05/02 07:40

rails初心者です。表題の件で、理解を確認したいことがあり、投稿いたします。

2点確認させてください。
①deviseのcurrent_MODELというヘルパーがあります。 これをどのように使用するべきか
②適切なroutesの作り方(ネストとroutesの関係)


現在、練習でQ&Aサイトを作成していますがその際、deviseのcurrent_MODELというヘルパーがあります。
これを使って以下のようなコードを書きました。これについて、私が理解していることが正しいのか、間違っているのか、
確認させてください。

@answer = current_user.answers.build


上記に関して、以下のモデルを作成しており、相互に関連付けを行っています。

**Userモデル** class User < ApplicationRecord has_many :questions, dependent: :destroy has_many :respond_answers, class_name: "Answer", dependent: :destroy end **Questionモデル** class Question < ApplicationRecord has_many :answers belongs_to :user end **Answerモデル** class Answer < ApplicationRecord belongs_to :question belongs_to :responder, class_name: "User", foreign_key: "user_id" end

それに対して、ルートは以下のように設定しています。
※ネスト構造が深くなりすぎることを懸念し、questionとanswerはネストさせていません。

resources :users, only: [:index, :show] resources :questions resources :answers do resources :comments, shallow: true resources :likes, only: [:create] end

私の理解


answers_controller.rbで、特定のuserがanswerを作ることができると考え、
@answer = current_user.answers.build
などとしていましたが、これは、無駄なのではないかと考えました。

そう考えた理由は、pathにあります。つまり、この回答の表示は、
questions/show.html.erbで行います。

その際のpathは、/questions/:id です。
もし、user/:user_id/answers/:idなどとしたければ、current_user.answersもOKだと思うのです。
しかし、今回のように、/question/:idのページでの表示だと、current_userを使う必要はないのでは、
と感じました。この理解は大丈夫でしょうか?


次に、上記に関連して、pathの作り方と、controllerでの表現方法の関連性ですが、
controllerでネストを作る際は、パスの構造に大きく影響するのではないかと考えています。

例えば、@comment = @post.comments.build(@@@)とする場合は、
pathが/posts/:id/comments/ をしたい場合であり、この場合は、current_user.commentsとは
絶対にならない、と理解しています。この理解で大丈夫でしょうか?

railsでcontrollerやviewを作成していく際に、最初の起点となるのは、
このroutesの作り方で、これが間違うと、後々大きく影響するのではないかと考えています。

kawakawa2018👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kawakawa2018

2018/05/02 06:09

はじめまして。ご質問の内容は 1.eviseのcurrent_MODELというヘルパーがあります。 これをどのように使用するべきか と 2.私が理解していることが正しいのか、間違っているのか、確認させてください。 ですね。2番目は端的に言えば 適切なroutesの作り方 ですね。少し質問が見えずらいので、時間のあるときに整理して書き直したほうがいいです、質問がつきやすいです。有識者でもわかりづらいです。
YousukeTanaka

2018/05/02 07:17

承知しました。ご助言ありがとうございます。
YousukeTanaka

2018/05/02 07:41

質問を修正しました。アドバイスありがとうございました。
guest

回答1

0

ベストアンサー

つまり、current_userをいつ使うか、あるいは、さらに言えば、controllerでネストを作る際は、

パスの構造に大きく影響するのではないかと考えています。

current_userはその名の通り「現在のユーザー」を取得するものですが、それが(ログインやユーザー管理関係を除けば)パス構造に影響を与えるとは全く思えません。

投稿者と質問の紐付けもプログラムを作る際に決めるべきものであり、たとえば「管理者は他の人の名義で代理投稿できる」というような仕組みを付けた場合、投稿とcurrent_userは全く無縁になる、ということもありえます。

投稿2018/05/02 06:30

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/05/02 06:38

また、通常の場合、Answerの新規作成については、「Answers.create」でuser_idを指定するというような方法をとって、「current_user.answers.buid」なんてことはあまり行いません。
YousukeTanaka

2018/05/02 07:22

大変参考になりました。理解が固まりました。感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問