레일 건조 컨트롤러

11876 단어 railsweddevruby
어떤 프로그래밍 언어에서든 건조한 코드를 만드는 것이 중요하다.본고에서 우리는 Rails CRUD 컨트롤러를 작성하는 세 가지 방법을 연구하고gem를 사용하여 추상적인 컨트롤러를 사용할 것이다.
TL;TR: code 로 직접 이동하려면 전체 저장소를 보십시오.

설치 프로그램
새 rails 프로젝트를 만듭니다: rails new rails_dry --database=postgresql, 이전을 실행합니다: rails db:migrate.
표준 CRUD 작업을 보기 위해 세 개의 리소스를 생성합니다.
  • 블로그
  • 우편
  • 이 세 가지 자원의 작업 원리는 모두 블로그 유형 사이트의 글을 중심으로 한다.사용자 계정이 없기 때문에 이것은 건장한 응용 프로그램의 예가 아니다.대신 CRUD 컨트롤러를 작성하는 세 가지 방법을 보여줍니다.따라서 우리는 세 가지 기본적으로 같은 자원을 연구하고 있지만 인코딩이 약간 다르다.
    각 리소스 컨트롤러는 리소스에 대해 before_filterstrong_params를 설정합니다.예: Articles 컨트롤러:
    class ArticlesController < ApplicationController
      before_action :set_article, only: %i[show edit update destroy]
      ...
    
      private
    
      # Use callbacks to share common setup or constraints between actions.
      def set_article
        @article = Article.find(params[:id])
      end
    
      # Only allow a list of trusted parameters through.
      def article_params
        params.require(:article).permit(:title, :content)
      end
    end
    
    또한 각 참조 자료에서 모델에 대한 검증(기사 예)을 추가했습니다.
    class Article < ApplicationRecord
      validates :title, :content, presence: true
    
    end
    

    문장.
    그래서 나는 기본 컨트롤러를 설치했다.이 컨트롤러는 내가 훈련 캠프에서 공부하는 방식을 대표하고 컨트롤러 코드를 작성하는 간단한 방법을 대표한다.다음과 같은 방법을 살펴보겠습니다.
    def new
        @article = Article.new
    end
    
    def create
      @article = Article.create(article_params)
      if @article.save
        flash[:notice] = "Article was successfully created."
        redirect_to articles_path
      else
        render :new
      end
    end
    
    이 예에서, 만약 글이 성공적으로 만들어진다면, 글의 색인 페이지로 다시 지정됩니다.오류가 발생하면 사용자는 작성 페이지로 안내됩니다.볼 수 있음Articles Controller

    블로거
    블로그 자원에 대해 우리는 rails 비계 생성기를 사용할 것이다.
    rails g scaffold Blog title content:text
    
    마이그레이션 실행을 기억하십시오: rails db:migrate.
    # GET /blogs/new
    def new
      @blog = Blog.new
    end
    
    # POST /blogs
    # POST /blogs.json
    def create
      @blog = Blog.new(blog_params)
    
      respond_to do |format|
        if @blog.save
          format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
          format.json { render :show, status: :created, location: @blog }
        else
          format.html { render :new }
          format.json { render json: @blog.errors, status: :unprocessable_entity }
        end
      end
    end
    
    비계는 원 프로그래밍을 사용하여 코드를 생성한다.respond_to 블록 조수 방법은 컨트롤러 클래스(또는 더 정확히 말하면 초클래스)에 추가됩니다.이것은 보기로 보낼 응답 (브라우저로 보낼 것) 을 참조합니다.위에 표시된 블록은 포맷된 데이터입니다. 블록에서'format'파라미터를 전달합니다. 브라우저가 html이나 json 데이터를 요청할 때마다 컨트롤러에서 보기로 보냅니다.
    비슷한 점에 유의하십시오.
  • 한 줄 코드에 저장된 후에 다시 방향을 정하고 메시지를 보냅니다.
  • 오류의 방향은 문장 자원과 기본적으로 같다.
  • 문제--사실 문제가 되지는 않지만, 곧 지루해질 것이다.그러나 respond_to 블록은 Articles 블록보다 읽기 쉽다.
    볼 수 있음Blogs Controller

    붙이다
    이 자원에 대해 우리는 다른 방법을 채택할 것이다.우리가 블로그 자원에서 지적한 바와 같이 컨트롤러는 더욱 깨끗하지만 상당히 지루하다.우리는 responders gem를 설치할 것이다.이gem은 Rails 4.2에서 삭제된 respond_with에 대한 지원을 추가했고 멋진 일을 많이 할 수 있도록 허락했습니다.설정 respondersgem:
  • GEM 파일에 추가: gem "responder"bundle install
  • 응답기 설치: rails g responsers:install
  • 재부팅 기억하기rails server
  • gem 설치는 다음 구성을 application_controller에 추가합니다.
    require "application_responder"
    
    class ApplicationController < ActionController::Base
      self.responder = ApplicationResponder
      respond_to :html
    
    end
    
    현재 rails 비계를 사용하여 Post 자원 생성:
    rails g scaffold Post title content:text
    
    마이그레이션 실행을 기억하십시오: rails db:migrate.
    컨트롤러를 주의하는 방법은 얼마나 깨끗합니까?우리는 respond_to에서 컨트롤러의 before_filter 형식을 정의할 수 있다.이 경우 발전기는 :html 에서 벌금을 물었기 때문에 application_controller 로 지정되었다.
    class PostsController < ApplicationController
      before_action :set_post, only: %i[show edit update destroy]
    
      respond_to :html
    
      ...
    
      def new
        @post = Post.new
        respond_with(@post)
      end
    
    
      def create
        @post = Post.new(post_params)
        @post.save
        respond_with(@post)
      end
    
      ...
    
    end
    
    
    색인 보기에서만 :json 형식을 사용하면 어떻게 합니까?너무 쉬워요!
    class PostsController < ApplicationController
      before_action :set_post, only: %i[show edit update destroy]
    
      respond_to :html
      respond_to :json, only: :index
    
    create 방법은 세 줄 코드다.게시물을 성공적으로 저장하면 해당 게시물의 방향이 바뀌고 확인이 실패하면 오류가 발생합니다.이것은 매우 건조한 컨트롤러를 만들어서 매우 큰 유연성을 가지고 있다.
    볼 수 있음Posts Controller

    각주
    이거 재미있다.메모를 남기거나 DM으로 보내주세요.
    파렴치한 플러그인: 위대한 회사에서 일하고 있다면 다양한 기능과 생활 경험을 가진 소프트웨어 개발자를 찾고 있습니다. 저에게 메시지를 보내고 제 사이트를 보세요.

    좋은 웹페이지 즐겨찾기