레일 건조 컨트롤러
TL;TR: code 로 직접 이동하려면 전체 저장소를 보십시오.
설치 프로그램
새 rails 프로젝트를 만듭니다:
rails new rails_dry --database=postgresql
, 이전을 실행합니다: rails db:migrate
.표준 CRUD 작업을 보기 위해 세 개의 리소스를 생성합니다.
각 리소스 컨트롤러는 리소스에 대해
before_filter
및 strong_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
에 대한 지원을 추가했고 멋진 일을 많이 할 수 있도록 허락했습니다.설정 responders
gem:gem "responder"
및 bundle install
rails g responsers:install
rails server
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으로 보내주세요.
파렴치한 플러그인: 위대한 회사에서 일하고 있다면 다양한 기능과 생활 경험을 가진 소프트웨어 개발자를 찾고 있습니다. 저에게 메시지를 보내고 제 사이트를 보세요.
Reference
이 문제에 관하여(레일 건조 컨트롤러), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/eclecticcoding/rails-dry-controllers-25fc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)