루비레일즈 클론코딩 영상 리뷰입니다..:)
기억하고 싶은 부분만 슥삭 메모했습니다.
https://www.youtube.com/watch?v=lHRt8TsvQbo
pack_controller.rb index 액션 수정하기
publish인 상태만 게시판에서 보일 수 있도록 수정해주어야 한다.
def index
//@packs = Pack.all
@packs = Pack.published
end
pack 모델 더미 데이터 추가하기
- app>models>pack.rb 에 self.set_dummy_datas를 생성
- 20.times를 통해 20번의 create 반복이 가능하다.
- faker gem을 활용해 random으로 product_name을 생성한다.
https://github.com/faker-ruby/faker
//gemfile
gem 'faker', :git => 'https://github.com/faker-ruby/faker.git', :branch => 'master'
//pack.rb
def self.set_dummy_datas
20.times do
// 20번 동안 Pack 더미 생성
Pack.create(
product_name: Faker::Superhero.unique.name , //unique 사용시 중복제거하여 새로운 name 생성함.
company_name: Faker::Superhero.unique.power ,
price: [1000, 2000, 3000].sample // 랜덤 선택
end
end
rails console 실행하기
rails c
Pack.set_dummy_datas
장바구니 모델 설계
rails g model Cart user:references pack:references quantity:integer
// *_create_carts.rb
def change
create_table :carts do |t|
t.references :user, foreign_key: true
t.references :pack, foreign_key: true
t.integer :quantity, default: 1 // 장바구니 수량 기본값 설정
t.timestamps
end
end
모델 관계 설정
//app>models>user.rb
has_many :carts, dependent: :destory
has_many :packs, through :carts
//app>models>pack.rb
has_many :carts, dependent: :destory
has_many :users, through :carts
기능설계
routes 설정하기
//routs.rb
resources :carts, only: [:create]
packs show 페이지 수정하기(장바구니 폼 만들기)
- show.html에 form페이지 만들기
- carts controller에 pack_id, user_id, quantity를 생성하는 create 액션 생성하기
- pack_id를 넘겨주기
#packs > show.html
<form action="/carts" method="POST">
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<input type="hidden" name="pack_id" value="<%= @pack.id %>">
#pack_id 가져오기
<div class="form-group">
<label for="quantity">수량</label>
<input type="number name="quantity" value="1" min="1" max="10">
</div>
<button type="submit" class="btn btn-outline-dark">장바구니 등록</button>
</form>
rails g controller carts create
#CartsController
before_action :authenticate_user!
#모든 액션은 사용자가 로그인했을때만 실행
def create
Cart.create(
pack_id: params[:pack_id],
user_id: current_user.id,
quantity: params[:quantity]
)
redirect_back(fallback_location: root_path)
end
cart 어드민 생성하기
rails g active_admin:resource user
rails g active_admin:resource cart
- cart를 특정 사용자의 장바구니가 되도록 설정해주어야 한다.
- belongs_to를 통해 users 설정해주면 루트가 자동으로 생성된다.
#app>admin>carts.rb
belongs_to :user
/admin/users/:user_id/carts #route 자동 생성
user 어드민 장바구니 기능 연결
- user 모델
- user의 장바구니의 유무를 알리는 칼럼을 추가한다.
- 특정 사용자이 장바구니로 가는 a 링크를 생성한다.
- cart 모델
- 카트에 담긴 가격의 총 합을 보여주는 칼럼을 추가한다.
#app>admin>users.rb
ActiveAdmin.register User do
index do
selectable_column
id_column
column :email
#user의 장바구니의 유무를 알리는 칼럼
column "장바구니 유무" do |user|
user.carts.present?
end
#특정 사용자의 장바구니로 가는 루트를 생성
actions do |user|
a "장바구니 확인", href: "/admin/users/#{user.id}/carts"
end
end
end
#app>admin>carts.rb
ActiveAdmin.register Cart do
belongs_to :user
index do
selectable_column
id_column
column :pack
column :quantity
column "총 합" do |cart|
number_to+currency(cart.pack.price * cart.quantity)
end
actions
end
end
'Computer Engineering > ruby on rails' 카테고리의 다른 글
[rails] 모델 흐름 상상해보기 (0) | 2022.07.12 |
---|---|
[ruby on rails] acts_as_paranoid로 레코드 삭제를 칼럼으로 대체하기 (0) | 2022.06.27 |
[ruby on rails] err 422 및 CSRF token authenticity 해결 (0) | 2022.06.24 |
[ruby on rails] 히스킨 클론 코딩 3 - vaildation 처리 (0) | 2022.06.07 |
ruby on rails 환경설정 (0) | 2022.06.01 |