2013-08-26 3 views
1

모델의 모든 열을 반복하고 (1) 값을 소문자로 설정하고 (2) 트리밍을 수행하지만 구문이 올바로 표시되지 않는 것 같습니다. .Ruby를 사용하여 모델의 열을 반복 함

@response.attributes.each do |attr_name, attr_value|
   @response."#{attr_name}".downcase.strip!
end

나는 주위를 검색 한 실제로 모델 열의 값을 설정하는 예를 찾을 수 없습니다 : 이것은 내가 지금까지있는 것입니다. 모든 예제에서는 각 열의 값 또는 필드 이름을 표시합니다. 다른 언어에서는 이것을 수행하는 평가 또는 평가 함수가 있지만 Ruby에서 해당 함수를 찾을 수없는 것 같습니다.

+1

'send'는 당신이 찾고있는 것입니다 – apneadiving

+0

그건 전혀 잘못된 구문입니다 ... – meagar

+0

created_at 및 update_id와 id를 downcase할까요? –

답변

2

당신은 이름으로 ActiveRecord 속성을 변경하기 위해 write_attribute 방법을 사용할 수 있습니다

@response.attributes.each do |attr_name, attr_value| 
    @response.write_attribute(attr_name, attr_value.downcase.strip) 
end 

는 이름으로 접근 한 무리를 호출 send 방법을 사용하는 것이 일반적입니다 ActiveRecord 프레임 워크의 외부.

@response.attributes.each do |attr_name, attr_value| 
    setter = "#{attr_name}=" 
    @response.send(setter, attr_value.downcase.strip) 
end 

그러나, 액티브의 저자는 이러한 요구를 예견하고 write_attribute 구문은 여기 내 추천 것 : 즉, 너무 여기에 작동합니다.

+0

은 write_attribute가 비공개 방식이므로 보내는 예제와 함께 전송됩니다. 빠른 답변 감사합니다 – TaimoorQ

1

이 코드를 시도해야합니다 :

@response.attributes.each do |attr_name, attr_value| 
    @response[attr_name.to_sym] = attr_value.to_s.downcase.strip 
end 

그런 다음 @response을 확인합니다. @response 변수에서 모든 값을 소문자로 제거하고 제거합니다.