유튜브 강의의 영상리뷰입니다.
두서없이 작성해보았습니다.. :)..
https://www.youtube.com/watch?v=mlpVas0kBAk
user 칼럼 추가하기
$ rails g migration add_cols_to_users name:string address:string post_code:string
$ rails db:migrate
validation 유효성 검사 추가하기
class Person < ApplicationRecord
validates :name, length: { minimum: 2 }
validates :bio, length: { maximum: 500 }
validates :password, length: { in: 6..20 }
validates :registration_number, length: { is: 6 }
end
- length로 최대, 최소, 길이를 조절할 수 있음.
- minimum : 최소값 지정하기
- maximum : 최대값 지정하기
- in : 6~20
- is : 해당 크기만 허용
유효성 검사가 잘 됐는지 확인해보기
rails c
User.create(email: "2@2", password:"111111", phone:"01011112222", post_code:"00000")
validates 처리 시 주의 사항
validates 처리시 입력을 필수적으로 해야한다. 값이 없을때만 is가 동작하도록 처리가 필요함
class User < ApplicationRecord
validates :phone, length: { is: 11 }, allow_nill: true
validates :post_code, length: { is: 5 }, allow_nill: true
end
allow_nill: true로 null값을 허용해주면 값이 저장된다.
Pack 컬럼 상상하기
가격, 수량, is_publish칼럼 추가하기
rails g migration add_cols_to_packs price:decimal is_publish:boolean
db>migration 파일로 들어가서 방금 생성한 칼럼의 is_publish의 기본값을 true로 설정
add_column :packs, :is_publish, :boolean, default: true
이후 rake db 해주기
rake db:migrate
app>model> Pack 칼럼 validation 처리하기
- 팩 이미지, 네임, 가격이 필수적이기 때문에 처리해주기
- boolean의 경우 exclusion을 이용해 nill값을 못받도록 처리하기
class Pack < ApplicationRecord
validates :product_name, :company_name, :price, presence: true
validates :is_publish, exclusion: [nil]
end
app>admin> Pack 어드민 수정하기 (form, ko.yml)
- is_publis 추가하기
- admin 페이지에서 number_to_currency로 price 1,000원 형태로 출력하기
index do
selectable_column
id_column
column :image do |pack|
if pack.image.attached?
image_tag url_for(pack.image), class: "small_img"
else
"이미지 없음"
end
end
column :product_name
column :company_name
column :price do |pack|
number_to_currency(pack.price) //ex) 1,000원 출력
end
column :is_publish //admin 페이지에 보이게 함
actions
end
form do |f|
f.inputs do
f.input :image, as: :file
f.input :product_name
f.input :company_name
f.input :desc
f.input :price, hint: "실제 판매 가격을 입력해주세요"
f.input :is_publish
end
f.actions
end
app>models> Pack 모델 scope 기능 추가하기
publish 범위를 수정하는 기능을 scope라고 한다.
class Pack < ApplicationRecord
has_one_attached :image
validates :product_name, :company_name, :price, presence: true
validates :is_publish, exclusion: [nil]
scope :published, -> { Pack.where( is_publish: true) }
scope :unpublished, -> { Pack.where( is_publish: false) }
end
rails console에서 확인해보기
rails c
Pack.published //공개처리
Pack.unpublished //비공개처리
app>admin> pack.rb admin페이지에서 scope확인할 수 있도록 추가하기
ActiveAdmin.register Pack do
scope :all
scope -> {"공개"}, :published, default: true
scope -> {"비공개"}, :unpublished
app>admin> Pack 어드민 배치 액션 추가하기
데이터가 방대할 경우 여러개의 데이터를 한번에 비공개/공개처리하는 액션을 추가해주어야 한다.
ids는 Pack의 id를 의미한다.
index do
....
end
//controller 부분을 짠다고 생각하면 됨
bach_action :publish do |ids|
@packs = Pack.where(id: ids)
// 선택된 pack들의 id를 받아서 각각 true 처리를 해준다.
@packs.each do |pack|
pack.update(is_publish: true)
end
flash[:notice] = "마스크 팩이 공개처리 되었습니다." //공개처리했을때만 알림
redirect_back(fallback_location: root_path) //새로고침시 redirect_back
end
bach_action :unpublish do |ids|
@packs = Pack.where(id: ids)
// 선택된 pack들의 id를 받아서 각각 false 처리를 해준다.
@packs.each do |pack|
pack.update(is_publish: false)
end
flash[:notice] = "마스크 팩이 비공개처리 되었습니다." //공개처리했을때만 알림
redirect_back(fallback_location: root_path) //새로고침시 redirect_back
end
form do |f|
....
'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] 히스킨 클론 코딩 4 - 장바구니 기능 (0) | 2022.06.07 |
ruby on rails 환경설정 (0) | 2022.06.01 |