H30 가을 기본 정보 기술자 시험문 3 시스템(수시 가필

7983 단어 루비Railsmemo
2019년 3, 4월 사이에는 엔지니어 하에서 Ruby를 중심으로 여러가지 배웠다.
그 중 H30 가을 기본 정보 기술자 시험문 3의 콘서트에 준한 사이트를 실제로 만들고 있었다.

5월 이후에도 공부하면서 조금씩 기능 등을 추가했지만 출력하지 않았다.
언젠가 또한 RubyonRails에 비슷한 것을 할 때를 위해 남겨두자.

참조



내 사이트



콘서트 문제의 Github 리포지토리
GithubPages

자신의 관련 출력



21일차: H30 가을 기본 정보 기술자 시험 질문 3 데이터베이스
프로그래밍을 두 달 동안 세부적으로 배웠습니다.

트랜잭션(Payment 컨트롤러)



엔지니어하에서 배우고, 구조를 이해하고, 출력 18일째: 거래 을 쓰고는 있었지만, 깊이까지 이해하지 못하고, 구현시에 오르고 있었다.

콘서트 티켓 지불시 포인트 사용, 추가 당 Payment 컨트롤러 내에 구현.
※※※ 또한 User 테이블에 소지금 컬럼을 추가하지 않았기 때문에

거래 흐름


  • 사용자는 포인트 User.point를 가지고 있습니다.
  • 구매시 User.point의 일부/전부를 지불액 Sale.amount에 충당할 수 있다.
  • 사용 포인트 Sale.used_point가 업데이트됩니다
  • 지불액으로부터 사용한 User.point를 뺀 것이, 결제액 Payment.amount가 된다.
  • 결제액 Payment.amount 중, 기본 비율이 부여 포인트 Payment.added_point가 된다.
  • 사용자의 포인트 잔액은 (지불 전) User.point - Sale.used_point + Payment.added_point에서 갱신됩니다.

  • 결제 완료 조건


  • User.point, Sale.used_point, Payment.added_point는 모두 0 이상(>=0)
  • 모델측의 밸리데이션 validates :point, numericality: { greater_than_or_equal_to: 0 } 이용

  • User.point >= Sale.used_point
  • False가 되는 조작은 악의 밖에 없기 때문에 , 트랜잭션외의 if문으로


  • 구현 자체



    User.point, Sale.used_point, Payment.added_point는 모두 0 이상(>=0)

    각 모델.rb
    validates :point, numericality: { greater_than_or_equal_to: 0 } # User
    validates :used_point, numericality: { greater_than_or_equal_to: 0 } # Sale
    validates :added_point, numericality: { greater_than_or_equal_to: 0 } # Payment
    

    users_controller.rb
    def payment
        @user = 割愛
        @sale = 割愛
        @concert = 割愛
        @payment = Payment.new(sale_id: @sale.id, date: Date.current)
        respond_to do |format|
          if current_user.point < params_used_point 
            # 所持ポイントを超過している旨の警告文 (以下、ポイントをPと略す)
          else # 所持P範囲内で支払おうとしている場合
            begin
              ActiveRecord::Base.transaction do
                if @sale.amount <= params_used_point # 使用Pが販売額を超えてる時。
                  @sale.update!(used_point: @sale.amount)
                  @payment.update(amount: 0, added_point: 0) # 支払成功。決済額が0なので、追加Pもゼロ
                else
                  @sale.update!(used_point: params_used_point)
                  @payment.update!(amount: pay_amount, added_point: 追加P計算関数)
                end
                @user.update!(point: ユーザP更新関数)
                # 支払い完了と表示
              end
            rescue StandardError => e # トランザクション失敗したら
              logger.error e
              logger.error e.backtrace.join("\n")
              @sale = 割愛
              @concert = 割愛
              format.html { render :confirm, notice: 'エラー' }
            end
          end
        end
    end
    

    뭐, 안 되는 부분도 있다고 생각한다. 하지만 글쎄,

    Github 보안 경고




    nokogiri에 대한 보안 경고가 왔습니다.
    nokogiri. . . Gemfile에는 쓰지 않았다. Gemfile.lock 전용입니다.

    확실히, Gemfile.lock에는, Gemfile에는 쓰지 않아도 의존관계에 있는 것은, 쓰여지기 때문에, 이번은 그 외 gem이 nokogiri에 의존하고 있을 것이다.

    이번에는 bundle update가 적당할 것이다.
  • gem update
  • gem 명령은 Gemfile 또는 Gemfile.lock과 독립적으로 작동합니다.
  • 설치된 gem에 대해 최신 버전이 있으면 최신 버전을 설치합니다.

  • bundle update
  • Gemfile 및 Gemfile.lock을 기반으로 동작


  • terminal
    bundle update nokogiri 
    git add -i
    git commit -m 'update nokogiri'
    git push origin master'
    

    보안 경고 사라졌다.

    좋은 웹페이지 즐겨찾기