매개 변수와 궤도

10966 단어 railscodenewbie
사진 작성자@georgie_cobbs
첫 번째 Rails 응용 프로그램을 만드는 것은 감동적인 경험일 수 있지만, 초보 개발자에게 곤혹스러울 수 있는 것은 Params의 개념, 그리고 우리가 필요로 하는 데이터에 접근할 수 있도록 어떻게 확보하는가이다. 사용자가 나에게 제공한 정보든, 우리가 배후에서 전달하고자 하는 프로젝트든.이 문장에서 우리는 이 점을 실현하는 몇 가지 다른 방식을 볼 것이다.

무엇이 정부입니까?
Params는 GET나 POST 요청을 통해 컨트롤러에 전달되는 매개 변수입니다. ActionController:::Base.응용 프로그램은 ApplicationController를 통해 이러한 매개변수에 액세스할 수 있습니다.일반적으로 매개변수는 URL이나 양식을 통해 제공되는 정보와 같은 사용자가 제공하는 정보로 구성되지만 사용자가 새 정보를 입력하지 않은 경우 매개변수에 액세스하고 제어해야 합니다.

지나가는 애인

URL을 통한 매개 변수 전달
사용자로부터 매개 변수를 가져오는 가장 간단한 방법은 그들이 사용하는 URL을 통해서이다.예를 들어, 사용자가 웹 사이트/users/22를 입력할 때 액세스할 수 있는 매개변수는 다음과 같습니다.
<ActionController::Parameters {"controller"=>"users", "action"=>"show", "id"=>"22"} permitted: true>
URL 끝에 id "22"를 추가하여 원하는 프로필을 지정할 수 있습니다.따라서, 이 id에 접근할 수 있으며, UsersController show action의 인자 [:id] 를 사용하여 사용자에게 무엇을 찾고 있는지 정확하게 표시할 수 있습니다.
def show
    @user = User.find(params[:id])
end
비록 이것은 매우 유용하고 필요하지만, 이것은params의 기본적인 예이다. 사용자는 많은 다른 방식으로 우리가 사용할 수 있도록 정보를 제공할 수 있다.다음은 사용자가 제출한 데이터를 어떻게 처리하고 이 데이터를 한 보기에서 다른 보기로 전달하는지 연구할 것이다.

양식을 통한 매개 변수 전달
개발자들이 일반적으로 익숙한 첫 번째 매개 변수를 전달하는 방법은 표를 통과하는 것이다.몇 가지 다른 방법으로 표를 구성할 수 있는데 여기서 그 중의 몇 가지 방법을 더욱 연구할 것이다.
이 예에서는 form for를 사용하여 새 구성 파일을 생성할 수 있습니다.
<h2><%= "Create a Profile" %></h2>

<%= form_for @user do |f| %>
    Username: <%=f.text_field :username %><br><br>
    Password: <%=f.password_field :password %><br><br>
    Location: <%=f.text_field :user_location %><br><br>
    <%=f.submit %>
<% end %>
사용자가 정보를 텍스트 필드에 제출하면, 프로필을 데이터베이스에 추가할 수 있도록 이 데이터에 접근해야 합니다.이 목적으로 액세스할 수 있는 매개변수는 다음과 같습니다.
<ActionController::Parameters {"authenticity_token"=>"6Uz75TYfsd5Q5HAkJzZKGl7Vjc4pLPsyFsjsPQZGmorhMYMNM29rD9pfJjWXJ/156fUbz9L8uoBjDoHeRdi56A==", "user"=><ActionController::Parameters {"username"=>"andy", "password"=>"password", "user_location"=>"San Francisco"} permitted: true>, "commit"=>"Create User", "controller"=>"users", "action"=>"create"} permitted: true>
사용자가 입력한 모든 정보를 우리는 방문할 수 있으며, 우리는 자신의 의사에 따라 이 정보를 사용하고 조작할 수 있다.이 예에서는 다음과 같은 방법으로 UsersController에서 강력한 매개변수를 설정하는 추가 단계를 수행했습니다.
    def user_params
        params.require(:user).permit(:username, :password, :user_location)
    end
강한 파라미터는 개발자 도구 상자에서 선택할 수 있지만 강력하게 추천하는 부분이다.사용자가 폼을 편집하고 잠재적인 악의적인 입력을 제공하는 것을 허용하지 않습니다. 사용자가 무엇을 필요로 하는지 (이 예는:user 실례), 그리고 우리가 무엇을 허용하는지 (여기는:username,:password,:user location).
이런 방법은 우리가 사용자 파라미터를 호출해서 데이터에 접근할 수 있다는 것을 의미한다.예를 들어, 사용자 이름을 액세스하려면 다음과 같이 할 수 있습니다.
user_params["username"]
이 예에서는 사용자를 위한 새 프로파일을 작성할 때 작성 작업에 매개변수를 전달할 수 있습니다.
def create
    @user = User.new(user_params)
    @user.save
    redirect_to @instructor
end
사용자가 입력한 데이터를 포함하는 파라미터를 사용하면 데이터베이스에 프로필을 추가할 수 있습니다.

숨겨진 필드 태그로 매개변수 전달
폼을 통해 입력된 데이터에 접근하는 방법을 직관적으로 볼 수 있지만 특정 시간에 사용자가 직접 입력하지 않은 상황에서 보기 사이에서 정보를 전달하는 방법은 좀 복잡할 수 있다.예를 들어, 우리는 한 사용자가 우리의 온라인 상점에서 어떤 상품을 선택했는데, 지금은 그들이 주문 요약에 들어가기를 원하느냐는 질문을 받는다고 상상할 수 있다.우리는 그들이 선택한 상품에 대한 정보를 새 주문 페이지로 옮겨서 그들이 실제 어떤 일을 완성하기 전에 무엇을 선택했는지 볼 수 있도록 확보해야 한다.사용자가 어떤 내용도 다시 입력해야 하기 때문에 우리는 숨겨진 field 라벨을 사용하여 그들이 우리에게 제공한 정보를 전달할 수 있다. 아래와 같다.
<%= form_for @order do |o| %>
    <%= hidden_field_tag(:item_1, @item[0].id) %>
    <%= hidden_field_tag(:item_2, @item[1].id) %>
    <%= o.submit "Proceed to Order Summary" %>
<% end %>
이 페이지에서 @items 배열에 액세스하여:item 1 및:item 2를 배열의 첫 번째 요소와 두 번째 요소의 ID로 설정할 수 있습니다.분명히 이것은 매우 좁은 예이다. 왜냐하면 우리는 사용자가 두 개의 항목만 선택할 수 있지만, 이것은 응용 프로그램의 기능에 따라 확장할 수 있기 때문이다.

버튼을 통해 매개변수 전달
일반적인 상황에서, 우리는 표가 없지만, 여전히 정보를 전달할 수 있어야 한다.이렇게 할 수 있는 방법 중 하나는 다음과 같이 버튼에 매개변수를 정의하는 것입니다.
<%= button_to "Place an Order", new_order_path, params: {items: @items}, method: :get %><br>
마찬가지로, 사용자가 페이지를 변경할 때 정보를 다시 입력해야 하는 것을 원하지 않기 때문에, 매개 변수에 items: to@items를 설정해서 모든 데이터가 일치하도록 할 수 있습니다.이것은 그들이 표를 통해 데이터를 제출하는 것처럼 매개 변수에 접근할 수 있다는 것을 의미한다.버튼 이 있는params를 사용하면 어떤 데이터가 필요한지 확인하고 다음 보기에서 접근할 수 있습니다.

링크를 통해 매개변수 전달
마찬가지로, 우리도 링크를 통해 파라미터를 전달할 수 있다.문법이 조금 다르기 때문에 우리는 파라미터를 정의할 필요가 없다. 우리가 button to에 대해 한 것처럼, 이것은 거의 같은 방식으로 정보를 전달한다.이 예에서 @item에 접근할 수 있도록 합니다.id와 @style.다음 보기의 id:
<%= link_to @item.name, new_order_path(item_id: @item.id, style_id: @style.id) %><br>
사용자가 보기에 그들은 단지 링크를 간단하게 눌렀을 뿐이지만, 우리는 백엔드에서 추가 정보를 전달하여, 우리의 응용 프로그램이 더욱 원활하게 실행되고, 사용자는 어떠한 정보도 다시 입력할 필요가 없다.

다음 중 가장 유효한 옵션은 무엇입니까?
응용 프로그램의 구체적인 수요에 따라 이러한 서로 다른 방법 중 어느 것이든 사용자로부터 데이터를 얻고 이 정보를 방문하는 데 사용할 수 있다.사용자가 양식을 제출하고 응용 프로그램에서 추가 정보를 요청하는 경우 숨겨진 field 태그를 사용해야 할 수도 있습니다.링크나 단추를 통해 데이터를 전달하면 사용자가 새로운 정보를 입력하지 않은 상황에서 파라미터를 전달할 수 있으며 백엔드에서 데이터를 전달하면 된다.

출처
  • "Action Controller Parameters", API, 2020년 9월 8일 방문
  • "hidden_field_tag", API, 2020년 9월 8일 방문
  • 좋은 웹페이지 즐겨찾기