레일스 매개 변수 설명?


228

누구나 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

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


2
서버 측 웹 개발에 대한 배경 지식은 무엇입니까? 어떤 기술을 이미 알고 있습니까?
Maurício Linhares

3
나는 수년간 HTML과 CSS를 사용 해왔다. PHP, JS, Java를 사용한 수업 그래도 PHP와 함께 MVC를 거의 사용하지 않았습니다. Java를 사용하여 프로그래밍을 배웠습니다. 그리고 나는 데이터베이스 이론을 철저히 이해합니다.
Dru

답변:


281

매개 변수는 페이지를 요청할 때 사용자의 브라우저에서 가져옵니다. 가장 일반적인 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 배열 과 같습니다 .


13
$ _REQUEST는 get, post 및 cookie 데이터를 포함하고 params는 get 및 post 데이터 만 포함한다는 점을 제외하고 $ _REQUEST와 동일합니다.
Parziphal

3
@renocor POST 데이터는 Rails params해시에도 포함되어 있습니다. 쿠키 데이터는 session해시에 포함됩니다 .
Richard Jones

이 답변은 다른 매개 변수 중 하나 인 URL을 생략합니다. 자세한 내용은 hammar의 답변을 참조하십시오.
Richard Jones

1
toasterlovin, 내 대답의 두 번째 문장을 읽거나 첫 번째 예를 보지 않은 것 같습니다.
David Grayson

1
@AnkitDhingra ... HTTP 매개 변수는 키 / 값 쌍과 Rails (대부분 Rack gem)가 키 값에 따라 해시와 배열로 구문 분석하기 때문에 항상 문자열이라고 생각합니다. 그러나 나는 아무것도 보지 못했습니다. Rails에게 값이 숫자임을 알려줍니다.
rubyprince

75

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

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

match 'products/:id', ...

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


두 번째 매개 변수는 어떻게 얻습니까? / squad / id / member / id / stuff 같은
weteamsteve

48

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]항상 가능하며, 현재의 컨트롤러와 액션을 포함

1
User supplied parameters조금 더 메모를 확장 해 주 시겠습니까? 예를 들어 UsersController의 params hash 예제가 도움이 될 것입니다. 귀하의 예는 해시처럼 보일 것입니다 : {first_name: "mike", user: {first_name: "mike"} ...} 맞습니까?
7stud

1
나는 레일 4에서 그것을 보지 못했습니다. 예를 들어 {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "action"=>"update", "controller"=>"apples", "id"=>"4"}. 내가 틀렸다면 용서해주세요. 저는 레일 초보자입니다. 당신의 메모에 따르면, 나는 {"_method"=>"put", "authenticity_token"=>"gubHya6uQrQLjPRXhOC0RUuCRdn7NFr6CeKrbRfBSHI=", "ripe"=>"true", "apple" => {"ripe"=>"true"}, "action"=>"update", "controller"=>"apples", "id"=>"4"} 그것이 레일 4의 강력한 매개 변수 와 관련이 있는지 여부를 모르겠습니다 .
7stud

2
Rails 4에서 중복 된 매개 변수가 표시되지만 Rails 자체 HTML 게시물이 아닌 json POST 요청 (Angularjs 사용)에서만 가능합니다. 이 링크는 이유를 설명합니다 : stackoverflow.com/questions/10774972/…
Homan

13

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

양식을 게시 할 때는 일반적으로 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 조건을 가진 데이터베이스에서 최신 또는 마지막으로 삽입 된 투표를 찾습니다.

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


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.