누구나 params
Rails 컨트롤러에서 어디에서 왔는지, 무엇을 참조하는지 설명 할 수 있습니까?
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에는 다음 세 가지 매개 변수 그룹이 있습니다.
- 사용자 제공 매개 변수
- GET (http://domain.com/url?param1=value1¶m2=value2 는 params [: param1] 및 params [: param2]를 설정합니다)
- POST (예 : JSON, XML은 자동으로 구문 분석되고 매개 변수에 저장 됨)
- 참고 : 기본적으로 Rails는 사용자 제공 매개 변수를 복제하여 usersController에있는 경우 params [: user]에 저장합니다. wrap_parameters 설정으로 변경할 수 있습니다.
- 라우팅 매개 변수
match '/user/:id'
routes.rb에서 params [: id]를 설정합니다
- 기본 매개 변수
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를