ルーティングについて
-2023年01月27日-
resources :photos
routes.rbファイルにて「resources :photos」は下記を表します。
ルートパスの確認方法は2種類ございます。
①:ターミナルにてrails routesを実行
②:サーバーを起動し、URL末尾に/rails/info/routesを追記
パスとURL用ヘルパー
resources :photos
を例にとると、下記のようなURL用ヘルパーが作成されます。
photos_path
# /photos
new_photo_path
# /photos/new
edit_photo_path(:id)
# /photos/:id/edit
#(edit_photo_path(10)であれば/photos/10/editを返します)
photo_path(:id)
# /photos/:id
#(photo_path(10)であれば/photos/10を返します)
※Prefixがurlヘルパーを表してます、questionをphotoに置き換えて考えてください。
また_urlヘルパー(photos_urlなど)もあります。
_urlヘルパーは、同じパスの前に「現在のホスト名」「ポート番号」「パスのプレフィックス」を追加して返します。
1と多結合の場合
ここで「質問文」と「回答文」という関係を考えてみましょう。
1つの「質問文」から「回答文」をたくさん投稿することが出来ます、ですので『has_many』の関係となります。
一方で、「回答文」は1つの「質問文」だけに紐づきます、『be_longs_to』の関係となります。
※questionモデルが先に作られている前提です。
# コマンドプロンプト
rails g model Answer name:string content:text question:references
# model/answer.rb
class Answer < ApplicationRecord
belongs_to :question
end
# model/answer.rb
class Answer < ApplicationRecord
belongs_to :question
end
# model/question.rb
class Question < ApplicationRecord
has_many :answers
end
# model/routes.rb
Rails.application.routes.draw do
resources :questions do
resources :answers
end
end
上記の設定で子要素のルーティングが作られます。