Rails의 모형에 쓰인 방법은 어떻게 컨트롤러에 사용합니까?

12548 단어 RubyRails
이 글은 초보자를 대상으로 한 것으로, 루비 온 레일스가 시작됐다.

이 기사를 쓴 이유


처음 사용한 프레임이 루비 온 레일즈였다면 많은 분이 모형 사용법을 고민하셨겠죠?
나 혼자 그래.
controller에 방법을 쓰고find(id) 등으로 데이터베이스에서 사용자 정보를 내보내며view에 HTML을 쓰면 됩니다..모델 필요 없죠?
라일스를 독학했기 때문에 모델의 필요성을 전혀 몰랐어요.
모델에 가장 많이 쓰인 것은 association(has many,belongs to 등)과validation이다. 처음에 나는 이렇게 생각했다. "공란의 형식으로 발송되는 것을 방지하기 위해validation 모델이 있다."
예를 들어 User 모델에는 다음 코드만 적혀 있습니다.
user.rb
  has_many :article, dependent: :destroy #Articleモデルとの関係定義

  #空欄防止
  validates :username, presence: true
  validates :email, presence: true 
물론 모델을 사용하지 않아도 작은 서비스라면 전혀 문제없다
조금 큰 서비스라면 컨트롤러의 코드량이 늘어나고(작은 컨트롤러) 그때는 이해가 되더라도 수개월 뒤에 코드를 보면 어떤 코드인지 모를 수도 있다.
하지만 "모델에 방법을 써도 컨트롤러를 어떻게 쓰나요?"
나는 줄곧 이렇게 생각했다.
나는 인터넷에서 많은 것을 찾았지만 초보자에게는 이해하기 어려웠고 결국은 컨트롤러에 많은 방법을 써서 대응했다.
이 글은 가능한 한 컨트롤러가 실례적인 방법을 어떻게 사용하는지 알게 한다
설명하고 싶은데요.(반 방법은 다른 문장에도 쓸 수 있을 것 같다)
어딘가 데이터베이스에 이런 사용자가 저장되어 있다.
id:1
이름: 야마다 타로
이메일 주소(email): [email protected]
나이(age):28세
그리고 다음user의 컨트롤러가 있다고 가정하십시오.
users_controller.rb
def index
  @user = User.find(1)
  @my_age = @user.too_young #これ何?
end
user는usename, 이메일,age 세 개의 매개 변수만 등록했습니다.
그러면영은 뭐야?
이것 괜찮아요?young은 실례적인 방법입니다. 모형으로 쓰는 방법입니다.
컨트롤러로 호출 중입니다.
User 모델 봐봐.
현재, User 모형은validation 이외에 어떤 too가 있습니까?영(young)이라는 방법이 쓰여 있는 것 같아요.
user.rb
class User < ApplicationRecord

  validates :username, presence: true
  validates :email, presence: true 

  #ここがインスタンスメソッド
  def too_young
    if self.age >= 20  #20歳以上の場合
       return "大人です!" 
    else  #20歳以下の場合
       return "子供です!"
    end
  end 

end
그렇다면 실례적인 방법은 무엇일까?

실례 방법


우선 모델에서 방법을 사용할 때 실례 방법을 이해하는 것이 중요하다.
실례 방법
방법은'방법'이 본 대로 집행의 일련의 처리를 총결하는 것이다.그러나 일반적인 방법은 프로그램에서 수시로 호출할 수 있지만 클래스 내에 기술된 방법은 클래스 제작 대상만 호출할 수 있다.이런 방법은 실례적인 방법이라고 불린다.
참조: Let's 프로그래밍(인스턴스 방법)https://www.javadrive.jp/ruby/class/index3.html
아니오, 몰라요.
우선, 실례는 무엇입니까?
실례는 클래스(설계도)로 만든 것이다.
예를 들어서 도미구이를 예를 들어서 설명해 주세요.
학급은 한마디로'설계도'다.
도미구이로 말하자면 도미구이를 만드는'형'이다.
돔구이는 반죽을 틀(Taiyaki 등급)에 부어 팥고물과 크림을 넣어 만든다.
만들어진 돔구이는 그 자체가 실례다.
돔구이를 사용한 예
#newはインスタンスを作るメソッドです。(元からrubyの言語内で定義されている)
@taiyaki_anko = Taiyaki.new(nakami: anko)
@taiyaki_cream = Taiyaki.new(nakami: cream)
#ここで作られる「@taiyaki_anko」「@taiyaki_cream」がインスタンスです。
팥맛 돔구이와 크림맛 돔구이는 내용에 따라 모양이 같을 뿐이다.
학급은 설계도이고 이 학급에서 만든 것(여기서는 돔구이)이 실례라는 것이다.
User 모델 이야기로 돌아가기controller의 @user가 실례가 되었다.
users_controller.rb
@user = User.find(params[:id])
#findはインスタンスを探すメソッド
#Userクラスから調べたいidに該当するユーザー情報をデータベースから取得しています。

@my_age = @user.too_young #@userというインスタンスにtoo_youngというメソッドを使っている。
여기, @user의 실례too영을 사용하는 방법.
실례@user에 사용되는 방법...이것은 실례적인 방법이다.
다시 한 번 말씀해 주세요.rb에 기재된too영법 좀 봐.
user.rb
class User < ApplicationRecord

  validates :username, presence: true
  validates :email, presence: true 

  #ここがインスタンスメソッド
  def too_young
    if self.age >= 20 #20歳以上の場合
       return "大人です!"
    else #20歳以下の場合
       return "子供です!"
    end
  end 

end
too_young 방법에는'self'가 있습니다.
이 "self"가 뭐랄까.controller.이것은 rb가 정의한 @user이다.

@user 실례에 대해'.(점)'연결을 사용하여 실례 방법을 호출할 때 실례 방법에서'self'를 사용하고self=호출원 실례@user를 사용한다.
현재
user.rb
id: 1, username: "山田太郎", email: "[email protected]", age: 28
그래서,self.age에서age열의 값을 호출하여 "28"의 숫자를 되돌려줍니다.
지금,if self.age>=20에서 조건분지를 진행해야 하기 때문에 이런 상황에서self.age는 28,
그러니까 정말이야. "나는 어른이야!"의 문자열이 반환됩니다.
user.rb
if self.age >= 20 #山田太郎は28歳だからtrue
   return "大人です!"
참고로 루비에서 방법 내의 마지막 공식에 대해 평가한 값은 자동으로 되돌아오는 값으로 되돌아온다
"return"을 생략해도 괜찮습니다.
(나는 리턴을 사용하는 것이 비교적 잘 알기 때문에 항상 리턴을 넣는다)
다음 코드 중@user은'어른!'를 입력합니다.
users_controller.rb
def index
  @user = User.find(params[:id])
  @my_age = @user.too_young #"大人です"
end
이렇게 모델에서 실례적인 방법을 정의하고 컨트롤러로 호출하는 방법을 사용한다.
(또 하나의 중요한 것은 유형 방법이지만 유형 방법의 설명은 다른 문장으로 쓴다.)
참고로 실제 인스턴트 방법 내의self는 생략할 수 있습니다.
아래와 같이 셀프를 생략해서 기술해도 문제가 없을 것이다.
user.rb
class User < ApplicationRecord

  validates :username, presence: true
  validates :email, presence: true 

  #ここがインスタンスメソッド
  def too_young
    if age >= 20 #selfを省略!
       return "大人です!"
    else
       return "子供です!"
    end
  end 

end

모델에서 인스턴스 방법을 정의하는 이유


별도영아, 이 방법은 User야.rb가 아니라users컨트롤러에 직접 써도 문제 없을 거예요.
users_controller.rb
def index
  @user = User.find(params[:id])

  #########ここが今までuser.rbに書いていたtoo_youngメソッドの中身###############
  if @user.age >= 20
     @my_age =  "大人です!"
  else
     @my_age = "子供です!"
  end
  #######################################################################

end
위와 같이 코드를 컨트롤러에 써도 움직일 수 있지만 컨트롤러 안에 이런if문을 많이 기술하면 엉망진창으로 읽기 어려울 것이다.
가장 중요한 것은 다른 사람이 이 코드를 읽을 때 이해하기 위해 더 힘들다는 것이다.
이곳의 코드 관리에 관해서는 대상 방향에 대한 학습에 따라 잘 알 수 있을 거라고 생각합니다.

총결산


계산 또는 조건이 불일치할 때 가능한 한 모델에 기술하십시오
컨트롤러 내부의 청결을 유지하세요.
이렇게 되면 나중에'코드를 다시 읽을 때 이해할 수 없는 콤플렉스'가 생기게 된다.이런 일은 적어지겠지.
반대로 너무 많이 써서 작은 모형이 된 경우도 있고...
큐타 투고는 이번이 처음이다.
자신의 공부를 위해 앞으로도 자주 투고하고 싶다.

좋은 웹페이지 즐겨찾기