2012-12-06 3 views
0

레일에서 컨트롤러의 create 메소드는 기본적으로 다른 값을 가진 HTTP 요청을받습니다. 이 해시를 PARAMS에서요청에서 단일 값을 얻는 레일

@apo = Apo.new(params[:apo]) 

하지만 내가 어떻게가 액세스 할 수있는 하나의 값 : 기본적 새로운 기록으로 는 다음과 같이 생성됩니다?

@apo = Apo.new do |a| 
     a.name = $someVariable 
     a.value = $anotherVariable 
     a.quantity = -> here i want to have one value which is in params[:apo] 
     end 

당신을 위해 무엇을 찾고 미안 이해 하는가 :

나는 이런 식으로 뭔가를 만드시겠습니까? 백만 가지 가능성을 시도했지만 작동하지 않습니다.

또는 두 번째 매개 변수 해시를보기에 만들면이 값만 저장됩니다.

P. 이 작업을 수행하는 데 자바 스크립트를 사용하고 싶지 않습니다 ...

고마워요!

답변

2

params은 특별하며 각 HTTP 요청마다 Rails에 의해 설정됩니다. 그것은

{ :object => { :attrib1 => "value1", :attrib2 => "value2" ... }} 

그래서 당신은 액티브 모델에 하나 만들 수 있습니다

params[:foo][:bar] 

처럼

params[:foo] 

개별 속성으로 전체 오브젝트 (필드)를 참조 할 수있는 형태의 해시입니다 첫 번째 예제에서와 같이 값의 해시를 전달하여 호출하십시오. 그러나 인스턴스를 만드는 다른 많은 방법이 있습니다. 수 있습니다

def make_apo(some_value, another_value) 
    apo = Apo.new 
    apo.name = some_value 
    apo.value = another_value 
end 

이러한 메서드는 Apo의 인스턴스를 반환합니다. 귀하의 경우, params에 일부 값이있는 경우 다른 인수로 params을 수락하도록 위를 변경하거나 전화 할 때 특정 값을 전달하십시오.

def make_apo(some_value, another_value, quantity, passed_params) 
    apo = Apo.new 
    apo.name = some_value 
    apo.value = another_value 
    apo.quantity = passed_params[:apo][:quantity] 
end 

그러나 이것은 매우 이상한 방법입니다. 그러니 그냥하지 마세요 - 당신이하는 것을 제안하는 것보다 진행되는 일을 설명하는 방법이 더 있습니다.

+0

오, 그게 정확히 내가 찾던 대답이었습니다 ... 정말 고마워요! – Tobi89