2010-02-11 7 views
1

J'ai créé un site qui utilise des sous-domaines et cherche si l'utilisateur est ou non à: subdomain.domain.com ou domain.com. Si l'utilisateur est dans subdomain.domain.com, /views/layouts/application.html.erb apparaît, si l'utilisateur est dans domain.com /views/layouts/promo_site.html.erb apparaît. Pour ce faire, j'ai suivi de près les directions Robby on Rails.Je veux utiliser un contrôleur avec un zéro attendu; comment puis-je gérer cela?

Les deux mises en page utilisent le même contrôleur.

J'ai isolé le problème suivant:

  1. logique du contrôleur est à l'origine l'échec. "méthode non définie` orders 'for nil: NilClass "
  2. Si le contrôleur est dans la bonne portée, subdomain.url.com la méthode current_account fonctionne correctement. Si elle se trouve dans l'étendue url.com, la méthode current_account produit un zéro. Une explication complète de la méthode current_account est here.
  3. Comment utiliser le contrôleur dans ces conditions?

Exemple d'utilisation de la méthode current_account:

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

* le code ci-dessus produit un nul sous la condition de url.com, et fonctionne très bien dans subdomain.url.com

Would quelque chose comme [current_account.orders.find(:all, :conditions => ["created_at >= ?", 3.days.ago], :order => "created_at DESC")] unless current_account.nil? être une solution suggérée?

Répondre

1

Vous ne pouvez pas appeler .orders sur zéro, alors vérifiez d'abord que ce serait une bonne idée. Je vous suggère de faire ce que vous avez dit, moins les crochets.

Controller:

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

Puis dans la vue, vous pouvez vérifier si @cpo est réglé avec quelque chose comme:

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