Rails에서 작성한 양식이 DB에 저장될 때까지 데이터 프로세스

9768 단어 RubyRails

개시하다


Rails 자습서 등지에서 Rails를 배우고 표를 작성하여 표에서 데이터를 입력하고 마지막으로 데이터를 DB에 저장한다View,Controller,DB의 데이터 흐름은 이미 배웠기 때문에 총괄한다.

컨디션


이 글은 아래 환경(2018년 6월 26일 시점)에서 동작 확인을 했다.
  • Ruby: 2.4.1
  • Rails: 5.0.7
  • 모델


    모형의 구성 등은 이전 글에 상세하게 기재되어 있기 때문에 여기서 생략합니다.

    경로


    라우팅 설정은 다음과 같습니다.
    
    $ rails routes
    
      Prefix Verb URI Pattern          Controller#Action
        root GET  /                    toppages#index
      signup GET  /signup(.:format)    users#new
       users POST /users(.:format)     users#create
    new_user GET  /users/new(.:format) users#new
        user GET  /users/:id(.:format) users#show
    

    데이터의 흐름을 대략적으로


    다음은 웹 응용 프로그램에서 흔히 볼 수 있는 사용자 로그인과 관련된View,Controller,DB의 데이터 절차를 소개한다.대충 말하다
  • 1. 사용자가 등록 화면으로 이동하는 링크를 클릭합니다(URL은 ~/signup
  • .
  • 2. 라우팅 |Get(HTTP 요청)|URL에서 액세스해야 함controllerアクションusers#new
  • 확인
  • 3. 컨트롤러가 호출된 후 동작 처리에 필요한 데이터(이번에는 실례 변수@user)를 보내기View
  • 4. 보기|인스턴스 변수의 컨텐트를 기준으로 HTML을 만들고 표시
  • 5. 사용자 입력 양식, 사용자 등록 버튼
  • 6. 라우팅 |Post(HTTP 요청)이므로 URL에서 액세스해야 합니다controllerアクション는 판별users#create
  • 만 가능합니다.
  • 7. 디렉터가 호출되어 실행 중인 작업 처리에 필요한 데이터@user를 DB에 저장
  • 8. DB에 저장
  • 각각 설명하다.

    사용자가 등록 화면으로 이동하는 링크를 클릭하십시오


    예를 들어, 사용자가 새 로그인 버튼을 클릭하면 URL이 ~/sigup인 경우

    루트에 따라 컨트롤러의 동작을 판단합니다 (new)


    URL이 ~/sigup인 경우 어떤 컨트롤러로 가는 경로를 확인한 후 users 컨트롤러의 new 동작으로 판단됨

    컨트롤러 (users) 동작 (new) 내 처리


    /app/controllers/users_controller.rb
    def new
      @user = User.new
    end
    
    User라는 모델 클래스에서 new 방법으로 신기록의 모델 실례를 만듭니다.
    이번에는 아무런 데이터가 없기 때문에 여기에 빈 실례를 만들어 실례 변수@user를 대체한다.
    실례 변수를 창에 보내기 View.
    여기에는 전진 보기의 지시가 없다.따라서 처리는 기본값views/users/new.html.erb으로 진행됩니다.

    HTML을 만들고 브라우저에 표시


    부트스트랩을 기반으로 한 것 같아서 그런 느낌이 든다.
    이 테이블에서 users 컨트롤러new의 작업에서 만들어진 빈 실례에서 사용자가 실제 데이터를 입력하고 DB에 저장하도록 합니다.

    사용자가 창에 입력하고 사용자 등록 버튼을 누르다


    모두 입력하고 등록 버튼을 누르면form내의 정보를 서버에 통합Post합니다.
    개발 도구를 확인해 보세요.그중의 인터넷을 보세요.HTTP의 머리에 있는 정보를 보고 싶다면 (오른쪽) HTTP 방법이 POST라는 것을 알 수 있습니다.

    매개 변수를 누르면 폼에서 보낸 데이터를 확인할 수 있습니다.

    다음은 날아온 이 부탁이 어떻게 처리되는지 살펴보자.

    루트에서 컨트롤러의 동작을 판단합니다 (create)


    URL이 ~/sigup인 경우 어떤 컨트롤러로 가는 경로를 확인한 후 users 컨트롤러의 new 동작으로 판단됨users에서 나온 Post 방법이기 때문에 기본적으로 users 컨트롤러의 create 동작을 처리합니다.

    컨트롤러 동작 내 처리


    app/controllers/users_controller.rb
      def create
        # ストロングパラメータから精査されたデータだけをインスタンスに格納
        @user = User.new(user_params)
    
        # インスタンスの保存に成功した場合の処理
        if @user.save
          flash[:success] = "ユーザを登録しました"
          redirect_to @user
    
        # インスタンスの保存に失敗した場合の処理
        else
          flash[:danger] = "ユーザの登録に失敗しました"
          render :new
        end
      end
    
      private
    
      def user_params
        params.require(:user).permit(:name, :email, :password, :password_confirmation)
      end
    
    코드 아래private는 이후에 정의된 방법이 동작이 아니라 이 분류에서만 사용하는 방법이라는 것을 명확하게 나타낸다.
    따라서 def user_params 동작이 아니라 단순한 방법이다.또 이 방법은Strong Paramter이다.이것은 필요한 매개 변수를 파악하여 전송된 데이터를 필터할 수 있다.
    금번
  • params.require(:user)에서 User는 모델의 형식에서 얻은 데이터와 관련이 있음을 명확히 나타낸다
  • permit 나중에 필터링하지 않고 통과할 열을 지정합니다.
  • 데이터베이스 저장

    mysql> select * from users;
    +----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
    | id | name     | email              | password_digest                                              | created_at          | updated_at          |
    +----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
    |  7 | pass7777 | pass7777@gmail.com | $2a$10$Hofz4hjxvF4sors86Q1kZugn/FGdAB/7SE.4/ZTuyfi4aJrItV.Am | 2018-06-25 08:26:05 | 2018-06-25 08:26:05 |
    +----+----------+--------------------+--------------------------------------------------------------+---------------------+---------------------+
    7 rows in set (0.00 sec)
    
    저장된 것을 확인했습니다. (id1에서 6을 생략했습니다.)
    이상은!

    이 기사를 읽은 사람.


    이 기사를 읽고 잘못된 점을 발견하거나 좋은 내용을 보충해 주신다면 편집요청과 평론란에 지적해 주십시오.

    참고 자료

  • http://igarashikuniaki.net/rails_textbook/new-create.html
  • 좋은 웹페이지 즐겨찾기