我们给电影网站添加一个用户评论的模型Review。首先看一下模型之间的关系。
一个评论属于且只属于一个评论者,一个评论者评论0或多部电影,一个评论所评论的电影有且仅有一部,一部电影有0到多个评论
rails generate model Review potatoes:integer comments:text moviegoer:references movie:references
rake db:migrate
生成的模型自动反应了上述的外键关系,如app/models/review.rb
class Review < ApplicationRecord
belongs_to :moviegoer
belongs_to :movie
end
修改app/models/movie.rb添加如下一行
has_many :reviews
修改app/models/moviegoer.rb添加如下一行
has_many :reviews
修改app/models/moviegoer.rb添加如下一行,实现查询影评人评论的所有电影
has_many :movies, through: :reviews
app/models/review.rb关联对象的校验
class Review < ApplicationRecord
belongs_to :moviegoer
belongs_to :movie
# review is valid only if it's associated with a movie:
validates :movie_id, :presence => true
# can ALSO require that the referenced movie itself be valid
# in order for the review to be valid:
validates_associated :movie
end
修改config/routes.rb,电影movie包含评论review,因此用下述方式表示评论
resources :movies do
resources :reviews
end
这样,我们得到路由如下
| movie_reviews_path | GET | /movies/:movie_id/reviews(.:format) | reviews#index |
|---|---|---|---|
| POST | /movies/:movie_id/reviews(.:format) | reviews#create | |
| new_movie_review_path | GET | /movies/:movie_id/reviews/new(.:format) | reviews#new |
| edit_movie_review_path | GET | /movies/:movie_id/reviews/:id/edit(.:format) | reviews#edit |
| movie_review_path | GET | /movies/:movie_id/reviews/:id(.:format) | reviews#show |
| PATCH | /movies/:movie_id/reviews/:id(.:format) | reviews#update | |
| PUT | /movies/:movie_id/reviews/:id(.:format) | reviews#update | |
| DELETE | /movies/:movie_id/reviews/:id(.:format) |