2011-01-29 3 views
1

Я использую Ruby On Rails 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

Я бы, вероятно, немного от него разобрал и вместо того, чтобы отправить весь запрос (модель, просматривающая запросы, выглядит странно), отправляйте только то, что действительно нужно проверить. Но вопрос ОП настолько краток, что это невозможно сделать, поэтому этот ответ в порядке. – 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

Ex обрабатывать соответствующие данные объекта запроса в контроллере, а затем передавать их на модель - либо путем установки атрибутов на экземпляр, либо путем передачи их в качестве параметров вызову метода.

Смежные вопросы