Rubyon Rails를 계속 공부하면서 몰랐던 것들.

15749 단어 Ruby
이 큐타는 루비를 배우는 중이에요.
늘 이해할 수 없었던 것들','이유','공부해서 이해한 것들'을 정리했다.
어쩌면 아직도 잘못된 점이 많을지도 몰라요.
왜냐하면 나 자신도 모르는 게 있으니까
이 점에 입각해 주십시오

줄곧 이해할 수 없었던 일


MVC 모델에 대한 이해


※ 다음은 제가 예전에 이해한 바입니다. 틀린 부분이 있습니다!

/라우팅... 요청에 따라 적절한 위치로 이동합니다.
브라우저에서 요청합니다.요청에 대해 라우팅을 통해 목적지, 컨트롤러 및 동작을 전송합니다.
컨트롤러... 설치하고 싶은 기능을 결정하는 곳.
・ 실현하고자 하는 기능에 대해 적당한 동작을 설정한다.그때는 레일스가 결정한 7개 동작 중 어느 것에 따라 결정된다.
[Rails] 7개의 동작과 각자의 캐릭터.
• 이 동작에서 DB에서 데이터를 가져오려면 변수를 정의해야 합니다.저기, 벚꽃부터.
• 변수를 정의하기 위해서는 rails가 미리 정한 방법으로 정의할 수 있을 것 같습니다.
• 보기... DB에서 전송된 데이터의 위치 표시
• HTML에서 <%> 또는 <%=%>로 둘러싸면 컨트롤러가 정의한 변수를 사용할 수 있을 것 같습니다.그곳은 움직임이 변했다.
・이외에 일반적인 HTML과 CSS를 쓰면 비교적 조용하다.
·모델... 컨트롤러부터 DB까지 가교 역할.DB 설계 명령에 대한 작업
・표를 작성하는 동안 rails g 모델을 진행해야 합니다.
• 모델 제작 후 특별한 편집이 필요 없을 것 같습니다.
· 파일 마이그레이션... DB가 디자인한 곳을 기술합니다.

다른 이해할 수 없는 일


왜 학급과 실례가 존재합니까?
· MVC 모형 중의 반은 어느 것을 가리킵니까?
· 클래스에서 인스턴스를 생성하는 것은 MVC의 어느 부분을 말합니까?
· controller의 동작에 정의된 것은 무엇입니까?
매개 변수를 왜 사용합니까?

왜 이해가 안 되지?


루비는 すべてのデータがオブジェクトとして扱われ、オブジェクトごとに性質や使えるメソッドを持つ라는 개념을 이해하지 못했다.
(물론 루비를 배우기 시작했을 때'대상을 향해'에 대한 설명이 있었지만 처음으로 이 개념을 이해하지 못했고 그렇게 중요하다고 생각하지 못했다.)

이해를 배우고 싶은 거.


학습한 이해를'User model'과'Tweet model'이라는 두 트위터 애플리케이션의 예와 함께 설명한다.

모델 정보


모델의 존재 의의


・데이터베이스 설계도.그 데이터베이스에 정의하고 싶은 방법을 적는 곳.(연관, 발리, 그 모형만의 방법 등)
• 따라서 모델은 DB 디자인이 필요한 제품만 만든다.정적 사이트라면 모델이 필요 없어요.
user.rb
class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable #ユーザーのログイン機能に関する記述
  has_many :tweets #tweet modelに対するアソシエーション

  validates :nickname, presence: true, length: { maximum: 6 } #バリデーション
end
tweet.rb
class Tweet < ApplicationRecord
  belongs_to :user #user modelに対するアソシエーション
end

Rails 정의 방법이 있음


• 위와 같이 모델에 기술하지 않아도 rails가 정의한 방법이 있다.
①표 열 이름
예를 들어 Twets table을 다음과 같은 상황으로 정의합니다
migrationfile
class CreateTweets < ActiveRecord::Migration[5.2]
  def change
    create_table :tweets do |t|
      t.string      :name
      t.text        :text
      t.text        :image
      t.timestamps null: true
    end
  end
end
트위터 모델에는 기술되지 않았지만 다음과 같은 방법을 정의했다.
tweet.rb
class Tweet < ApplicationRecord
  belongs_to :user #user modelに対するアソシエーション

  #以下、記述はされていないが使えるメソッド
  def name
    @name 
  end

  def text
    @text 
  end

  def image
    @image 
  end
end
② 애플 레코드 클래스의 방법(클래스의 계승)
rails g model 명령으로 생성된 모델 클래스는 모두 Application Record 클래스를 상속합니다.
Application Record 클래스テーブルにアクセスして情報を取得するためのメソッドが定義されており에서 모델 클래스는 이를 상속하여 테이블에서 정보를 얻습니다.
설명은 없지만 Twitter model에서 다음과 같은 방법을 정의했습니다.
tweet.rb
class Tweet < ApplicationRecord
  belongs_to :user #user modelに対するアソシエーション

  #以下、記述はされていないが使えるメソッド
  def all
    # ここの記述がわかんない
  end

  def new
    # ここの記述がわかんない
  end

  def save
    # ここの記述がわかんない
  end

  def create
    # ここの記述がわかんない
  end
end
각자가 쓴 기술

컨트롤러 정보


컨트롤러의 존재 의미


모델에 정의된 방법의 역할을 사용합니다.
users_controller.rb
class UsersController < ApplicationController
  def show
    user = User.find(params[:id]) # User modelで最初から定義されているfindメソッドを用いてidを引数にuserを見つけて来る
    @nickname = user.nickname # User modelで最初から定義されているnicknameをメソッド使って、user tableからnicknameを見つけてくる
    @tweets = user.tweets.page(params[:page]).per(5).order("created_at DESC")
  end
end
tweets_controller.rb
class TweetsController < ApplicationController
  before_action :move_to_index, except: :index

  def index
    @tweets = Tweet.includes(:user).page(params[:page]).per(5).order("created_at DESC")
  end

  def new
  end

  def create
    Tweet.create(image: tweet_params[:image], text: tweet_params[:text], user_id: current_user.id)
  end

  def destroy
    tweet = Tweet.find(params[:id])
    if tweet.user_id == current_user.id
      tweet.destroy
    end
  end

  def edit
    @tweet = Tweet.find(params[:id])
  end

  def update
    tweet = Tweet.find(params[:id])
    if tweet.user_id == current_user.id
      tweet.update(tweet_params)
    end
  end

  def show
    @tweet = Tweet.find(params[:id])
  end

  def search
    @tweets = Tweet.search(params[:keyword])
    respond_to do |format|
      format.html
      format.json
    end
  end

  private
  def tweet_params
    params.permit(:image, :text)
  end

  def move_to_index
    redirect_to action: :index unless user_signed_in?
  end
end
동작 내의 묘사 방법

Q.controller 의 작업 정의는 무엇입니까?

AかBのいづれか。

A.モデルに定義してあるメソッドを使って、データを引き出す
B.モデルに定義してあるメソッドを使って、データを引き出しインスタンス変数を定義してビューに渡す

その際にUser ControllerではUser modelで定義されているメソッドもつかえるし、tweet modelで定義されているメソッドも使える。

클래스 및 인스턴스


Q. 학급과 실례가 왜 존재하는가?

・Rubyでは、すべてのデータがオブジェクトとして扱われ、オブジェクトごとに性質や使えるメソッドを持つ
・オブジェクトを効率的に生成・管理するために、クラスとインスタンスという概念が存在する
・オブジェクト同士の共通の属性・メソッドをまとめて定義したものがクラスである
・クラスに基いて生成されたオブジェクトがインスタンス
예) User 모델은 학급에 미리 로그인 기능을 설치하고 닉네임 등록 시 미리 검증을 추가한다.
그곳에서 실제 등록된 이용자 1인 1인 실례.

Q. MVC 모델 반은 어떤 반을 뜻하는가?

・Controller
・Model
・table
(オブジェクトに共通の属性・メソッドを
まとめて定義したものはすべてクラス。)

Q. 클래스에서 인스턴스를 생성하는 것은 MVC의 어느 부분을 의미합니까?

(Controllerで)Modelのメソッドを使うとき。
必ずインスタンスが生成される。
모델을 사용하는 방법은 controller밖에 없죠?

매개변수 정보


Q. 매개변수를 사용하는 이유


조건에 따라 방법을 사용하기 위해서
tweets_controller.rb
  #このままだと毎回idが1のツイートしか編集できない
  def edit
    @tweet = Tweet.find(1)
  end

  #引数をわたすことによって様々なidのツイートの編集ができるようになる
  def edit
    @tweet = Tweet.find(params[:id])
  end
이상.
잘못된 점이 있으면 지적해 주십시오.

좋은 웹페이지 즐겨찾기