[Rails] 맞다, 컨트롤러로 매개변수 뽑자. [Action Args]

11993 단어 action_argsRubyRails
Rails에서 컨트롤러로 전송되는 값은
def show
  @user = User.find(params[:id])
end
이렇게 하면 찾을 수 있다.
단, ActionArgs의gem를 가져온 후
def show(id)
  @user = User.find(id)
end
이런 느낌이야.
post에서 전달된 값도 마찬가지다.
class UsersController < ApplicationController
  def create(user)
    @user = User.new(user)
    ...
  end
end
없어도 안 죽어쓰고 싶은 이유있죠
그러나 다른gem와 병용할 때 문제가 발생하는 경우도 있다.
캔캔캔캔과 함께 사용
Strong Parameters 주변의 문제이기 때문에 대부분의gem은 문제없을 것입니다.
그리고 부작용으로 처음 보는 사람
  • Rails 이런 것도 가능한가요!
  • 다른 프로젝트도 해보세요.
  • 없음

  • 왜요?
  • 사람을 곤혹스럽게 하는 힘을 가지고 있다.
    왜냐하면.. 쓰기에 편하기 때문에 쓰고 싶어요.

    사용법

    class UsersController < ApplicationController
      # params[:id] を必要とする
      def show(id)
        @user = User.find id
      end
    
      # params[:page] はあってもなくてもいい
      def index(page = nil)
        @users = User.page(page).per(50)
      end
    
      # ↑よりも↓の書き方がおすすめと README には書いてある
    
      # params[:page] はあってもなくてもいい
      def index(page: nil)
        @users = User.page(page).per(50)
      end
    
      # params[:post_id], params[:comment] を必要とする
      def create(post_id:, comment:)
        post = Post.find post_id
        if post.create comment
          ...
      end
    end
    
    매개 변수가 사라지지 않았기 때문에 이전과 같은 코드도 정상적으로 작동할 수 있을 것이다.

    Strong Parameters


    Strong Parameters에는 두 가지 방법이 있습니다.

    permit 메서드 호출

    class UsersController < ApplicationController
      def create(user)
        @user = User.new(user.permit(:name, :age))
        ...
      end
    end
    

    성명

  • 컨트롤러와 쌍을 이루는 모형을 진행할 때.
  • 예: UsersController <-> User
    class UsersController < ApplicationController
      # User モデルの Strong Parameters
      permits :name, :age
    
      # user は ActionArgs によって確認されたものが渡される
      def create(user)
        @user = User.new(user)
      end
    end
    
  • 컨트롤러와 쌍을 이루지 않은 경우
  • 지정model_name.
    class MembersController < ApplicationController
      # User モデルの Strong Parameters
      permits :name, :age, model_name: 'User'
    end
    

    Filter

    before_action시스템의 처리.
    평범하게 쓰다.
    class UsersController < ApplicationController
      before_action :set_user, only: :show
    
      def show
      end
    
      private
        # params[:id] が id にセットされる
        def set_user(id)
          @user = User.find(id)
        end
    end
    

    Scaffold Generator


    Action Args 스트림에서 생성됩니다.
    class UsersController < ApplicationController
      before_action :set_user, only: [:show, :edit, :update, :destroy]
      permits :name, :age, :email
    
      # GET /users
      def index
        @users = User.all
      end
    
      # GET /users/1
      def show
      end
    
      # GET /users/new
      def new
        @user = User.new
      end
    
      # GET /users/1/edit
      def edit
      end
    
      # POST /users
      def create(user)
        @user = User.new(user)
    
        if @user.save
          redirect_to @user, notice: 'User was successfully created.'
        else
          render action: 'new'
        end
      end
    
      # PUT /users/1
      def update(user)
        if @user.update_attributes(user)
          redirect_to @user, notice: 'User was successfully updated.'
        else
          render action: 'edit'
        end
      end
    
      # DELETE /users/1
      def destroy
        @user.destroy
    
        redirect_to users_url
      end
    
      private
        # Use callbacks to share common setup or constraints between actions.
        def set_user(id)
          @user = User.find(id)
        end
    end
    

    좋은 웹페이지 즐겨찾기