Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Rails 매개변수란 무엇이며 올바르게 사용하는 방법

Rails 매개변수에 대해 이야기합시다!

유용한 이유는 무엇입니까?

사용자는 세 가지 방법으로 웹 애플리케이션에 데이터를 보낼 수 있습니다.

이 세 가지 방법은 :

  1. 쿼리 매개변수 사용("example.com/?q=bacon" )
  2. 양식 제출("/users/sign_in" )
  3. URL 자체 내("/books/1" )

Rails에서 이 데이터에 어떻게 액세스합니까?

params 사용 .

컨트롤러 작업 내부 params를 호출할 수 있습니다. 양식 및 URL 쿼리 데이터 액세스 .

params란 무엇입니까? , 정확히?

ActionController::Parameters를 반환하는 메소드입니다. 실제로는 해시와 매우 유사하게 동작합니다.

지금.

params에서 하나의 값을 읽고 싶다고 가정해 보겠습니다. 해시.

방법은 다음과 같습니다. :

params[:id]

존재하는 경우 값을 얻습니다.

또는 nil 그렇지 않은 경우.

알아야 할 몇 가지 사항 :

  • 필드가 비어 있는 경우 빈 문자열이 표시됩니다
  • params 내의 모든 값 문자열입니다. 정수로 제출된 경우에도

잘 이해하지 못하는 Rails 매개변수를 좀 더 자세히 살펴보겠습니다. 혼란과 이상한 문제의 원인이 될 수 있습니다!

Rails 규칙:양식 필드 및 매개변수

양식 필드 및 URL 매개변수가 params에 어떻게 매핑됩니까? 키?

당신을 위한 예가 있습니다.

여기 :

<전>

이것은 /search에 POST 요청을 보내는 간단한 검색 양식입니다. .

결과적으로 이 params 개체:

{ "q"=>"", "controller"=>"책", "action"=>"검색" }

이 "q"는 무엇입니까?

HTML 양식에 있는 입력 필드의 이름 속성입니다. .

이름은 원하는 대로 지정할 수 있습니다.

form_for를 사용하여 양식을 만드는 경우 도우미 메서드를 사용하면 이름이 자동으로 생성되고 특정 패턴을 따릅니다.

예시 :

몇 개의 필드가 있는 # form_for(@book)는 다음과 같은 것을 생성합니다.

book[title] 필드 이름의 형식은 params를 생성합니다. 값이 중첩될 해시입니다.

예를 들어 설명하겠습니다. :

{ "책"=> { "제목"=>"", "저자"=>"", "표지"=>"", "언어"=>"영어" }}

사용자가 빈 양식을 제출하면 이것이 귀하가 받게 되는 것입니다.

컨트롤러에서...

이렇게 데이터에 액세스합니다. :

params[:book][:language]# "영어"params[:book][:author]# ""

이것은 해시처럼 작동하지만 일반 해시와 달리 기호와 문자열을 모두 동등한 키로 받아들입니다.

params["book"] &params[:book] 동일합니다.

매개변수를 허용하도록 경로 활성화

쿼리 매개변수 외에도 REST 스타일 매개변수를 활성화할 수도 있습니다.

Rails에서는 이것을 "동적 세그먼트"라고 부릅니다.

예를 들어 보겠습니다.

다음과 같은 경로가 있는 경우 :

'books/:id' 가져오기, 대상:'books#show'

또는 :

리소스:도서

다음과 같은 URL을 사용할 수 있습니다. :

/books/1

그런 다음 이 1에 액세스할 수 있습니다. , id books/:id .

params 사용 .

좋아요 :

params[:id]

이렇게 하면 사용자가 찾고 있는 특정 리소스를 찾는 데 도움이 됩니다.

Book.find(params[:id])

강력한 매개변수 이해

다음:

데이터베이스에 개체를 저장하려고 시도하지만 작동하지 않는 것 같습니다.

레일스 서버 로그를 확인하세요.

이것을 볼 수 있음 :

허용되지 않는 매개변수::언어

이것은 무엇을 의미합니까?

Rails는 보안 기능으로 Rails 4에서 "강력한 매개변수" 시스템을 도입했습니다.

강제로 속성을 허용 목록에 추가합니다. 저장할 수 있습니다.

이렇게 하면 악의적인 사용자가 admin = true를 설정할 수 있는 "대량 할당"이라는 문제가 방지됩니다. , 또는 일반적으로 액세스할 수 없는 다른 필드를 설정합니다.

다음과 같은 필드를 허용할 수 있습니다. :

def book_params params.require(:book).permit(:title, :author, :cover, :language)end

어떻게 작동합니까?

  • require 메소드는 params[:book]를 찾습니다. &없으면 오류를 발생시킵니다.
  • permit method는 허용되는(그러나 선택 사항인) 속성의 목록입니다.

결과적으로 새로운 params 이러한 속성으로 해시하지만 이제 데이터베이스에 저장하는 것이 분명합니다.

:

Book.create(book_params)

일반 Ruby 해시는 이 보안 시스템을 우회합니다.

:

Book.create(제목:"", 저자:"", 표지:"")

속성 이름(예:author ) 하드코딩되어 있습니다.

요약

Rails 매개변수, 작동 방식 및 Rails 프로젝트에서 올바르게 사용하는 방법에 대해 배웠습니다!

이제 연습하고 메모하고 복습할 차례입니다 🙂

읽어주셔서 감사합니다.