【Rails】複数テーブルで関連したデータを持つモデルをつくる
dotinstallに従ってやってみる。
今回はTaskというデータがProjectのデータに結びつくように設定してみる。
今まで自力で全部やってたじぶんにとってはめっちゃ違和感。慣れよう
modelを生成
まずはmodelを生成する
$ rails g model Task title done:boolean project:references
関連させたいテーブル名:references
とするらしい。なんだこれすげぇ。
Taskモデルを確認してみると以下のようになっていて、紐付けされてますよー的なコードが書かれていることがわかる。
class Task < ActiveRecord::Base belongs_to :project end
そしたら今度はProjectモデルの方にも、これが関連付けられてますよーって教えるコードを書く(ここは自動では関連付けされない)
class Project < ActiveRecord::Base has_many :tasks # ここを追加 validates :title, presence: { message: "* Type the title" }, length: { minimum: 3, message: "* Minimum Letter Number is 3" } end
そしたらdbに反映させておく
rake db:migrate
controller / view を生成
Taskコントローラを生成する
$ rails g controller Tasks
routing設定
config/routes.rbを以下のように設定
resources :projects do resources :tasks, only: [:create, :destroy] end
routesの確認をしてみると、createとdestroyのみルートが生成されてるのがわかる
▶ rake routes Prefix Verb URI Pattern Controller#Action project_tasks POST /projects/:project_id/tasks(.:format) tasks#create project_task DELETE /projects/:project_id/tasks/:id(.:format) tasks#destroy projects GET /projects(.:format) projects#index POST /projects(.:format) projects#create new_project GET /projects/new(.:format) projects#new edit_project GET /projects/:id/edit(.:format) projects#edit project GET /projects/:id(.:format) projects#show PATCH /projects/:id(.:format) projects#update PUT /projects/:id(.:format) projects#update DELETE /projects/:id(.:format) projects#destroy root GET / projects#index