je changerais la façon dont vous la portée des découvertes. Rails 3 est magnifique pour vous permettre de le faire car à peu près tout est possible.
Tout d'abord dans votre contrôleur je trouverais la ressource parent en utilisant quelque chose comme ceci:
before_filter :find_company
# your actions go here
private
def find_company
@company = Company.find(params[:company_id]) if params[:company_id]
end
Cela devrait être assez simple: trouver un enregistrement Company
qui a une carte d'identité qui correspond à celui passé depuis l'imbriquée route. S'il n'est pas imbriqué, il n'y aura pas de params[:company_id]
donc il n'y aura pas de jeu de variables @company
.
Ensuite, vous souhaitez étendre la recherche de projet, selon qu'un @company
est défini ou non. C'est facile aussi. Juste sous le premier before_filter
, mettre celui-ci:
before_filter :scope_projects
Définissez ensuite la méthode pour elle sous la méthode find_company
comme ceci:
def scope_projects
@projects = @company ? @company.projects : Project
end
Maintenant, vous pensez probablement « WOAH ». Je connais. Moi aussi.
Maintenant, où que vous référeniez l'association projects
ou la classe Project
, utilisez @projects
à la place. Par la puissance de cette méthode scope_projects
, votre application saura si vous voulez dire "tous les projets, jamais" ou "tous les projets, jamais, qui sont dans l'entreprise spécifiée".
Maintenant, quand vous arrivez à la vue, vous pourriez faire quelque chose comme ceci:
<h1><% if @company %><%= @company.name %>'s<% end %> Projects</h1>
Vous pouvez même le déplacer dans une aide:
def optional_company
if @company
@company.name + "'s"
end
end
Et ce vilain tour beau mec-o- logique dans ceci:
<h1><%= optional_company %> Projects</h1>
Modifier comme requis.
Hope this a été utile.
Merci! fonctionne comme un charme. – GSto