ruby on rails
many-to-many association
흰두부1
2020. 11. 23. 13:13
rails generate resource UserStock user:references stock:references
user와 stock의 M:M association 설정을 위해 UserStock resource를 생성한다.
invoke active_record
create db/migrate/20201123034604_create_user_stocks.rb
create app/models/user_stock.rb
invoke test_unit
create test/models/user_stock_test.rb
create test/fixtures/user_stocks.yml
invoke controller
create app/controllers/user_stocks_controller.rb
invoke erb
exist app/views/user_stocks
invoke test_unit
create test/controllers/user_stocks_controller_test.rb
invoke helper
create app/helpers/user_stocks_helper.rb
invoke test_unit
invoke assets
invoke scss
create app/assets/stylesheets/user_stocks.scss
invoke resource_route
route resources :user_stocks
위와 같이 파일들이 생성된다.
❯ rails routes --expanded | grep user_stocks
Prefix | user_stocks
URI | /user_stocks(.:format)
Controller#Action | user_stocks#index
URI | /user_stocks(.:format)
Controller#Action | user_stocks#create
URI | /user_stocks/new(.:format)
Controller#Action | user_stocks#new
URI | /user_stocks/:id/edit(.:format)
Controller#Action | user_stocks#edit
URI | /user_stocks/:id(.:format)
Controller#Action | user_stocks#show
URI | /user_stocks/:id(.:format)
Controller#Action | user_stocks#update
URI | /user_stocks/:id(.:format)
Controller#Action | user_stocks#update
URI | /user_stocks/:id(.:format)
Controller#Action | user_stocks#destroy
라우트도 확인
user.rb와 stock.rb model에 (validation과) association을 설정해준다.
class Stock < ApplicationRecord
has_many :user_stocks
has_many :users, through: :user_stocks
validates :name, :ticker, presence: true
class User < ApplicationRecord
has_many :user_stocks
has_many :stocks, through: :user_stocks
rails db:migrate로 migrate를 해준 뒤, console로 확인
user = User.first
stock = Stock.first
user.stocks << stock
stock.users << user
위와 같은 식으로 테스트를 해보면, 잘 작동하는 걸 알 수 있다.