2011-01-29 3 views
0

안녕하세요, 함수 내에서 일부 계산을 수행하려면 current_user 모델을 사용해야합니다. 함수 내에서 current_user.name = '무엇이든'과 같이해야하므로 name의 현재 값이 변경됩니다.레일 클론 또는 해시?

그러나 변경 사항을 로컬로 사용하려면 해당 기능 내에서만 수행해야합니다. Rails는 객체를 사용하기 때문에 문제가된다. 그래서 나는 생각하고있어, 할 수있는 최선의 일은 무엇인가?

아마도 current_user를 새로운 객체에 복제하고 그 함수 내에서 사용하겠습니까? 이것은 비싸 보입니다. 또는 모델에서 해시를 만들 수 있습니까? 그리고 제가 그렇게한다면 실제 모델은 바뀌지 않을 것입니다.

편집 : 그것은 그 해시 작품을 보이지만, 그와 관련된 어떤 종류가 없다, 그래서 같은 것을 할 경우 : 다음

@attacker = current_user.attributes 

을, 그것을 사용하는, 내가 다른 (같은 그리고 to_s를 지정해야 내가

@attacker의 [: 이름] 어떤 이유로 무기 호 오류)를 얻을 .to_s = '어떤'

답변

0

매개 변수? 당신이 모델의 모든 로직이 필요한 경우

loremized_name = my_f(current_user.name) 
+0

흠, 내가 같으면 컨트롤러에서 어딘가에

def my_f(name) new_name = "lorem" + name return new_name end 

변경해야 할 내 모델의 가능한 모든 속성에 대해 가상 속성을 만들고 싶지 않습니다. 해시로 할 수 있다고 생각하지 않습니까? – Spyros

+0

일반 변수입니다. '함수 내에서 몇 가지 계산을 수행 할 필요가 있고'당신은'그 변경이 로컬이되기를 원한다. 그 함수 안에서 만 수행된다'는 함수의 범위 내에서 변수를 사용하는 것이 안전하다. 변수를 반환하거나 원하는대로 함수 내에서 죽게 할 수 있습니다. 가상 속성이 필요하지 않습니다. – lbz

+0

당신이 맞습니다, 그것도 옵션입니다, 나는 또한 해시를 시도하고 그들은 지금도 잘 작동합니다. 변수 솔루션이 덜 비싸다고 생각됩니다. – Spyros

0

하는 가장 쉬운 방법은 간단하게 복제하는 것입니다 :

def local_function 
    user = current_user.clone 
    # Perform some calculations on user here 
end 
+0

yeap, 이것은 내가하고 있었던 것이었지만 위의 lbz처럼 변수를 사용하고 버렸다. 진짜 급한 일이 있다면 복제물을 정말 좋아하지 않습니다. – Spyros