레일스 매개 변수 설명?


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.