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

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

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

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

Q&A

解決済

1回答

326閲覧

過去の回答に対して質問。定義する場所について

kai20000803

総合スコア29

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/07 07:05

過去のテラテイルにある質問

これについて質問です。リンク内容

ここの回答についての質問です。

1つのモデルにまつわる操作→モデルに定義する
ビューでしか使わないロジック→ヘルパー
コントローラー内部で使う補助的なメソッド→コントローラー

僕がしたい質問

1 controllerのなかのcreateやdestroyやupdateも一つもモデルの操作でないか?なので、モデルにかくべき?となってしまう。それについてどうなのか。
2 controllerのindexなどはviewで一覧を表示するためだけに使っているので
これだとhelperに書くことになってしまうことについて。

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

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

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

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

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

guest

回答1

0

ベストアンサー

controllerのなかのcreateやdestroyやupdateも一つもモデルの操作でないか?
controllerのindexなどはviewで一覧を表示するためだけに使っているので

違います。コントローラーで定義するこれらのメソッドは、HTTPリクエストに応答するアクションです。結果的には「一つもモデルの操作」になることもあるかもしれませんが、意味が違います(し、Railsの構造上、コントローラーのメソッドとして書くこととなります)

投稿2020/08/07 07:07

maisumakun

総合スコア145208

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

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

maisumakun

2020/08/07 07:08

まさか、コントローラーのアクション自体を「別な箇所で定義すべき」と考えるとは思いませんでした。
kai20000803

2020/08/08 05:24

質問 1モデルに定義しているもの例えばuser.rbに定義するfollow機能などはhttpリクエストがないことになるんですが、そうすると使っている一般の人が何でfollowすることができるのでしょうか? 2元のmaisumaさんの質問への回答で ビューでしか使わないロジック→ヘルパー と書いてあったのですが、僕の参考していたコードを共有します。 helper.rbより module SessionsHelper def current_user @current_user ||= User.find_by(id: session[:user_id]) end def logged_in? !!current_user end end とあります。ここで定義したlogged_in?を使用して application_controllerの中の他の要素を定義するために使っていたのですが、 viewだけのために使っていないように思えるんですが、それについてはどうでしょうか?
maisumakun

2020/08/08 05:36

> モデルに定義しているもの例えばuser.rbに定義するfollow機能などはhttpリクエストがないことになるんですが、そうすると使っている一般の人が何でfollowすることができるのでしょうか? HTTP経由で呼び出すルートは別途で必要です(なければできません)。あくまでモデル内での仕事は「データの保存・変更などの処理」です。 > 2 それについてはどうでしょうか? 単に「コントローラーがかさばるのを防ぐ」ために、関連したコードをヘルパーに切り出すようなこともあります。「ビューでしか使わないロジック→ヘルパー」の逆は必ずしも成立しません。
kai20000803

2020/08/08 07:16

1の質問の回答への質問です。 モデルに定義している def followはターミナルでrails routesをしてもルーティングが表示されないんですが、 HTTP経由で呼び出すルートは別途で必要です(なければできません)。 と回答をもらいましたが、どこにルートがあるんですか?
maisumakun

2020/08/08 07:24 編集

> どこにルートがあるんですか? 断片的な情報しかないので判断できません(そして、ルーティングがモデルに向かうことはありません)。 「別な名前で設定されていて見落としている」、あるいは「本当にその動作をさせることができない」ということも考えられます。
kai20000803

2020/08/08 07:43

ルーティングがモデルに向かないことはわかります。それなら尚更モデルの操作をモデルに書くということがわからなくなります。操作をするにはリクエストに応えるためにルーティングが必要になり、リクエストを受けるのはコントローラということになり、maisumaさんのコメントのとおりモデルにはルーティングが向かないのでモデルの操作ができなくなると思うんですが、どうしてモデルの操作の定義はモデルにするんですか?間違っているのかもしれないですが、今はこう思います。
maisumakun

2020/08/08 07:47 編集

コントローラーからモデルを呼び出してください。 (何がわからないのかわからないです)
maisumakun

2020/08/08 07:51

ふと思ったのですが、「MVC」という根っこの概念を理解していないために、各部分でバラバラに理解しようとしているのではないでしょうか?
kai20000803

2020/08/08 22:45

ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問