[ruby-on-rails] 레일스 매개 변수 설명?

누구나 paramsRails 컨트롤러에서 어디에서 왔는지, 무엇을 참조하는지 설명 할 수 있습니까?

  def create
    @vote = Vote.new(params[:vote])
    item = params[:vote][:item_id]
    uid = params[:vote][:user_id]
    @extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])
    last_vote_time = @extant.created_at unless @extant.blank?
    curr_time = Time.now
  end

이 코드를 한 줄씩 읽고 무슨 일이 일어나고 있는지 이해하고 싶습니다.



답변

매개 변수는 페이지를 요청할 때 사용자의 브라우저에서 가져옵니다. 가장 일반적인 HTTP GET 요청의 경우 매개 변수는 URL로 인코딩됩니다. 예를 들어 사용자의 브라우저가 요청한 경우

http://www.example.com/?foo=1&boo=octopus

다음 params[:foo]“1”이 될 것이며, params[:boo]“문어”일 것이다.

HTTP / HTML에서 params는 실제로 키와 값이 문자열 인 일련의 키-값 쌍일 뿐이지 만 Ruby on Rails에는 매개 변수가 내부에 해시가있는 해시가되도록하는 특별한 구문이 있습니다. 예를 들어 사용자의 브라우저가 요청한 경우

http://www.example.com/?vote[item_id]=1&vote[user_id]=2

그러면 params[:vote]해시 params[:vote][:item_id]가되고 “1” params[:vote][:user_id]이되고 “2”가됩니다.

Ruby on Rails 매개 변수는 PHP$ _REQUEST 배열 과 같습니다 .


답변

다른 사람들이 지적했듯이 params값은 GET 요청의 쿼리 문자열 또는 POST 요청의 양식 데이터에서 올 수 있지만 세 번째 장소는 다음과 같습니다. URL의 경로.

아시다시피 Rails는 route라는 것을 사용하여 해당 컨트롤러 작업으로 요청을 보냅니다. 이 경로에는 URL에서 추출하여에 넣은 세그먼트가 포함될 수 있습니다 params. 예를 들어 다음과 같은 경로가있는 경우

match 'products/:id', ...

그런 다음과 같은 URL 요청 http://example.com/products/42이로 설정 params[:id]됩니다 42.


답변

Params에는 다음 세 가지 매개 변수 그룹이 있습니다.

  1. 사용자 제공 매개 변수
    • GET (http://domain.com/url?param1=value1¶m2=value2 는 params [: param1] 및 params [: param2]를 설정합니다)
    • POST (예 : JSON, XML은 자동으로 구문 분석되고 매개 변수에 저장 됨)
    • 참고 : 기본적으로 Rails는 사용자 제공 매개 변수를 복제하여 usersController에있는 경우 params [: user]에 저장합니다. wrap_parameters 설정으로 변경할 수 있습니다.
  2. 라우팅 매개 변수
    • match '/user/:id' routes.rb에서 params [: id]를 설정합니다
  3. 기본 매개 변수
    • params[:controller]그리고 params[:action]항상 가능하며, 현재의 컨트롤러와 액션을 포함

답변

기본적으로 매개 변수는 사용자 지정 데이터 대 레일 응용 프로그램입니다.

양식을 게시 할 때는 일반적으로 GET 요청이 아닌 POST 요청으로 수행합니다. 사이트를 탐색 할 때 정상적인 레일 요청을 GET 요청으로 생각할 수 있습니다.

양식을 제출하면 제어가 응용 프로그램으로 되돌아갑니다. 양식에 제출 한 값을 어떻게 얻습니까? params난 ~ 보여준다.

코드 정보 @vote = Vote.new params[:vote]params [: vote]의 데이터를 사용하여 데이터베이스에 새로운 투표를 만듭니다. 제출 된 양식 사용자의 이름이 : vote라는 이름으로 지정되면 모든 데이터는 해시의 : vote 필드에 있습니다.

다음 두 줄은 항목을 가져 오는 데 사용되며 uid 사용자는 양식에 제출했습니다.

@extant = Vote.find(:last, :conditions => ["item_id = ? AND user_id = ?", item, uid])

item_id = item 및 user_id = uid 조건을 가진 데이터베이스에서 최신 또는 마지막으로 삽입 된 투표를 찾습니다.

다음 줄은 마지막 투표 시간과 현재 시간이 걸립니다.


답변

Rails 측에는 객체 params를 반환하는 메소드가 ActionController::Parameters있습니다. 참조 https://stackoverflow.com/a/44070358/5462485를


답변