Доступность методов модели Rails в Controller - PullRequest
1 голос
/ 06 декабря 2011

У меня есть метод в моей модели, который должен определить User Agent.Как я могу сделать его доступным для всех моих методов контроллера?

Модель:

  def is_iphone_request?
       if request.user_agent =~ /iPhone/
       return true
     end
  end

Контроллер (выдает ошибку):

def index
  @user_agent = is_iphone_request?
end

Как этого добиться?Любая помощь очень ценится.

Ответы [ 3 ]

3 голосов
/ 06 декабря 2011

Поместите метод в ApplicationController вместо модели.

0 голосов
/ 06 декабря 2011

Хотя request будет не доступным в модели (вы получите NameError со следующим кодом), ваша текущая проблема заключается в том, что контроллер выдает NoMethodError, потому что отсутствует self. в определении метода. Сделайте это методом класса (добавив self.):

class MyModel < ActiveRecord::Base
  def self.is_iphone_request?
   if request.user_agent =~ /iPhone/
     return true
   end
end

Затем в вашем контроллере вы можете использовать:

MyModel.is_iphone_request?

Но, как я уже сказал, вы получите NameError, потому что request недоступен в модели.

Ваш метод is_iphone_request?, вероятно, должен жить в вашем ApplicationController (где это может быть обычный private метод). Вы также можете урезать его:

class ApplicationController < ActionController::Base
  ...
  private
  def is_iphone_request?
    request.user_agent =~ /iPhone/ ? true : false
  end
end

Затем в вашем контроллере вы можете использовать:

is_iphone_request?
0 голосов
/ 06 декабря 2011

Я не уверен, почему вы поставили проверку пользовательского агента запроса на модель - это похоже на поведение контроллера.И в контроллере есть атрибут запроса, который вы можете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...