2011-01-29 6 views
1

내가 레일 3에 루비를 사용하고 내가 파일 내 모델에서모델에서 '요청'방법을 사용할 수 있습니까?

if request.headers["CONTENT_LENGTH"] 
    ... 
end 

을이 같은 몇 가지를 할 트링하고 있지만이 오류 얻을 : 그래서

NameError (undefined local variable or method `request' for #<User:0x00...>): 

를, 그것은 할 수 있습니다 모델에서 '요청'메소드를 사용합니까? 그렇다면 어떻게?

+0

모델에서 요청에 액세스 할 수 있으면 여전히 그러지 않아야합니다. 당신이 해결하려고하는 실제 문제는 무엇입니까? 의심 할 여지없이 레일로 해결하는 더 좋은 방법이 있습니다. –

+0

모델에서 CUSTOM 유효성 검사 메소드를 사용하여 파일 업로드의 유효성을 검사하려고합니다. 이것도 참조하십시오 : http://stackoverflow.com/questions/4837014/how-to-check-the-field-content-length-of-an-http-request-using-ruby-on-rails-3 – user502052

+0

@ user502052 하지만 User 모델에서는 왜 그렇게합니까? – tokland

답변

2

요청이 컨트롤러 및보기 코드에서만 사용 가능하기 때문에 아니오. 설계 관점에서 보면 모델 코드 내에서 요청을 사용하는 것이 좋지 않지만 특정 사용자 인스턴스에 대한 요청으로 무언가를하고 싶다고 가정하면 해당 메소드에 대한 메소드를 작성하면됩니다.

class User 
    ... 
    def has_a_request?(request) 
    raise ArgumentError if(request.blank? || !request.respond_to(:headers)) 
    if(request.headers["CONTENT_LENGTH"] # Does it really have CONTENT_LENGTH btw? 
     puts "#{self.username} got a request with content length" 
     return true 
    else 
     puts "#{self.username} didn't get a request with content length" 
     return false 
    end 
    end 

그리고 다른 응용 프로그램에서 :

User.has_a_request?(request) 
+0

나는 그것을 조금씩 분해 할 것이고 요청 전체를 보내는 대신에 (요청을 들여다 보는 모델이 이상하게 생긴다.) 실제로 확인해야하는 것이 무엇이든 보내면된다. 하지만 OP 질문은 너무 간결하므로이를 수행하는 것이 불가능하므로이 대답은 괜찮습니다. – tokland

+0

동의 - 저는 요청 코드를 모델에 넣으려고하지 않습니다 ... – stef

0

메소드의 요청 객체를 사용하는 좋은 응용 프로그램 디자인 아니지만, 당신이 그것을 필요로 절대적 경우 당신은 할 수 있습니다 :

class User 
    def a_method request 
    end 
end 

class UserController 
    def index 
    User.find(params[:user]).a_method request 
    end 
end 
0

전 컨트롤러의 요청 객체에서 관련 데이터를 조사한 다음 인스턴스의 속성을 설정하거나 매개 변수로 메서드 호출에 전달하여 모델에 전달합니다.

관련 문제