Я хочу использовать контроллер с ожидаемым нулем; как мне справиться с этим? - PullRequest
1 голос
/ 11 февраля 2010

Я создал сайт, который использует субдомены и ищет, находится ли пользователь по адресу: subdomain.domain.com или domain.com. Если пользователь находится в subdomain.domain.com, появляется /views/layouts/application.html.erb, если пользователь находится в domain.com /views/layouts/promo_site.html.erb. Для этого я внимательно следовал указаниям Robby on Rails .

В обоих макетах используется один и тот же контроллер.

Я выделил следующую проблему:

  1. Логика контроллера вызывает сбой. "неопределенный метод` orders 'для nil: NilClass "
  2. Если контроллер находится в правильной области, subdomain.url.com метод current_account работает нормально. Если он находится в области действия url.com, метод current_account выдает nil. Полное объяснение метода current_account здесь .
  3. Как использовать контроллер в этих условиях?

Пример использования метода current_account:

created_purchase_orders = current_account.orders.find(:all, :conditions => ["created_at >= ?", 3.days.ago], :order => "created_at DESC")

* приведенный выше код создает ноль при условии url.com и отлично работает в subdomain.url.com

Было бы что-то вроде [current_account.orders.find(:all, :conditions => ["created_at >= ?", 3.days.ago], :order => "created_at DESC")] unless current_account.nil? предложенным исправлением?

1 Ответ

1 голос
/ 11 февраля 2010

Вы не можете звонить .orders на ноль, так что да, проверка первой была бы хорошей идеей. Я бы посоветовал вам сделать то, что вы сказали, за исключением квадратных скобок.

Контроллер:

@cpo = current_account.orders.find(:all, ...) unless current_account.blank?

Затем в представлении вы можете проверить, установлено ли @cpo с чем-то вроде:

<%= render :partial => "current_purchase_order", :collection => @cpo if @cpo.present? %>
...