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

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

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

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

Q&A

解決済

1回答

526閲覧

掲示板を作っていて、カテゴリー分けをしたいです。

bouyomisan

総合スコア87

Ruby on Rails

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

0グッド

0クリップ

投稿2017/05/23 06:09

categories_physics GET /categories/physics(.:format) categories/physics#index POST /categories/physics(.:format) categories/physics#create new_categories_physic GET /categories/physics/new(.:format) categories/physics#new categories_physic GET /categories/physics/:id(.:format) categories/physics#show DELETE /categories/physics/:id(.:format) categories/physics#destroy categories_math_index GET /categories/math(.:format) categories/math#index POST /categories/math(.:format) categories/math#create new_categories_math GET /categories/math/new(.:format) categories/math#new categories_math GET /categories/math/:id(.:format) categories/math#show DELETE /categories/math/:id(.:format) categories/math#destroy

御覧のとおり学問の名前が20くらいあるルーティングが20くらい続きます。さすがに1つずつモデルをつくるのも違うとおもうのですが、どのようなモデルやコントローラーを実装すればいいですか?

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

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

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

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

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

moke

2017/05/23 07:07

ここら辺に出てくる:idとはなんでしょうかcategoriesのidなのかはたまた学問ごとにmodelがあってそのidなのかそれがわからないと答えれれません
bouyomisan

2017/05/23 07:26

ありがとうございます。 id は学問ごとのモデルがもっているidです。 math のカテゴリーに新しいスレッドをたてると 1, 2, 3... というように増えていく仕様になってます。
moke

2017/05/23 07:49 編集

えっと、そうですか、そうするとidはスレッドのIDなのでは?categories/physics#indexはphysicsのスレッドの一覧で/categories/physics/:id(.:format)はそこから一つのスレッドを選択すると言うことでは無いのですか?
bouyomisan

2017/05/23 07:50

すみません言い間違えました!id はスレッド名です
guest

回答1

0

ベストアンサー

mathとかphysicsとかの科目によって独立した処理が何行も続くとか無い限り
ただurlにmathとか入れたいだけなら実際、ネストする必要なんか全くなく。
index と show と edit を new を誘導してやればいいと思います。

しかし、そもそも、URLの階層構造をみて、おお、綺麗にできているなとか感動するユーザーはほとんどいない
完全な自己満足で、ミスやバグを生み出しやすい内容だと言うことは肝に命じてください。

通常こういった階層構造を定義するよりは、パン屑リストを使って場所を教えた方がユーザビリティ高いです。

でも、なぜかこういった要望が非常に多いので、一応コードを書いておくと

ruby

1#categories_controller.rb 2def show 3@category=Category.find_by(name: params[:category_name]) 4@threads=@category.threads 5end

ruby

1#threads_controller.rb 2def show 3@category=Category.find_by(name: params[:category_name])||@thread.category 4params[:category_name]=@category.name 5end 6def index 7@category=Category.find_by(name: params[:category_name]) 8@threads=@category.threads 9end 10def edit 11@category=Category.find_by(name: params[:category_name])||@thread.category 12params[:category_name]=@category.name 13end
route.rb resouces :categories resouces :threads get 'categories/:category_name' => 'categories#show' #get 'categories/:category_name' =>'threads#index' #どちらにするか悩みどころ get 'categories/:category_name/:id' => 'threads#show' get 'categories/:category_name/new'=> 'threads#new' get 'categories/:category_name/edit/:id'=> 'threads#edit'

とすれば実現できるようになる。

ただ、categories/math
をcategories#showで処理するかthreads#indexで処理するか決めないといけない。
あとこのままではthreads/newとかのURLも残るのでresouces :threads ,except: [:new,:show]
とかする必要があるかもしれない。

また、さらにthreadsのidがmath/1 ,physics/2みたいに飛び飛びになるので
index_idとかのcolumnを作って科目内での順番を定義する方法もあるが、それはもはやRailsなのだろうか?

投稿2017/05/23 09:09

編集2017/05/23 09:20
moke

総合スコア2241

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問