[Ruby On Rails] 클래스 메소드와 인스턴스 메소드를 만들어 데이터 불러오기

sunaaa·2021년 4월 26일
1

Ruby On Rails

목록 보기
20/20
post-custom-banner

아이템 가져오기

  • Item.pending, Item.active, Item.disabled로 확인 가능함
  • item.status == 'active'라고 기존에 확인했지만
    이제 item.active?로 T/F 확인 가능
  • item.disabled!는 disabled 상태로 바꿔라

✨클래스 메소드와 인스턴스 메소드를 직접 만들어보자!

클래스의 메소드(method)란 어떠한 작업을 수행하기 위한 명령문의 집합
클래스 내에서 메소드는 static 키워드의 여부에 따라 다음과 같이 구분됨

  • 클래스 메소드(static method) : 특정 메소드에서 실행할 수 있는 메소드
  • 인스턴스 메소드(instance method) : 하나의 객체에서 실행할 수 있는 메소드
    => 클래스 메소드는 클래스 변수와 마찬가지로 인스턴스를 생성하지 않고도 바로 사용할 수 있습니다.
    => 따라서 클래스 메소드는 메소드 내부에서 인스턴스 변수를 사용할 수 없습니다.

클래스 메소드

# item.rb
  def self.puts_item_names
    # 여기서 self는 아이템 자기자신을 의미함
    # 실제로는 Item.find_each로 작동한다고 생각하면 됨
    # 그냥 each를 써서 반복문을 돌려도 되지만, find_each를 쓰는 것이 성능에 더 좋음
    # 아이템에 모든 것들을 반복문을 돌면서 각 값을 item에 할당을 하고 아이템의 이름을 출력하겠다
    self.find_each do |item|
      # 모든 item의 이름을 호출할 수 있게 됨
      puts item.name
  end

=> Item.puts_item_names를 레일즈 콘솔에 입력하면, 아이템 이름값만 출력 가능함

인스턴스 메소드

#item.rb
 # self가 안붙어있음. 그렇다는 것은 인스턴스 메소드라는 얘기임
 
 def puts_item_name
    puts self.name
  end

레일즈 콘솔
item = Item.last
item.puts_item_name item에 저장한 해당 값의 이름 출력 됨

  • 이 때 리턴되어 돌아오는 nil은 JS의 null과 같은 의미로, 이 상황에서는 return값이 없다는 의미임.

enum은?

  • 클래스 메소드, 인스턴스 메소드 둘 다 만들어준다
  • Item.active는 클래스 메소드
  • Item.active?, Item.active!는 인스턴스 메소드
  has_many :likes, dependent: :destroy
  has_many :reviews, dependent: :destroy
  • 여기서 likesreviews는 어떤 메소드?
  • 정답 : 인스턴스 메소드.
  • 클래스에서 실행할 수 있는 메소드가 아니라 인스턴스에서 실행 가능한 메소드.
  • item의 likes. 실행하는 주체가 어디인지 파악해보면 됨

케이스 설계

  • 특정 판매자의 상품 -> 그 판매자가 아닐지라도 외부 사용자가 볼 수 있어야 함
resources :orders 
class OrdersController < ApiController
  def index
    orders = current_api_user.orders
    render json: each_serialize(orders)
  end
end

rails routes|grep items
rails g serializer order_each

  • 내가 구매한 상품 -> 구매한 당사자만 볼 수 있고 외부 사용자는 볼 수 없어야 함
  resources :users do
    resources :items, only: :index
  end

=> /users/:user_id/items

추가 학습

profile
Be Playful Front-end Developer
post-custom-banner

0개의 댓글