现在我得到了正确的方法:
起初我需要定义范围,如:
scope ":account_id" do
resources :tasks
resources :projects
end
然后,为了使eversthing工作,在一个循环中引起链接,如:
<%= link_to "Project", project %>
不起作用,您需要在应用程序控制器中设置默认 url 选项:
def default_url_options(options={})
if @current_account.present?
{ :account_id => @current_account.id }
else
{ :account_id => nil }
end
end
这为我解决了所有No Route Matches Error
问题。如果没有 :account_id 就不会有错误,例如对于那个设计的东西。
对于@Mohamad:
before_filter :set_current_account
# current account
def set_current_account
# get account by scoped :account_id
if params[:account_id]
@current_account = Account.find(params[:account_id])
return @current_account
end
# dont' raise the exception if we are in that devise stuff
if !devise_controller?
raise "Account not found."
end
end
这种设计和错误处理可能会更好。:S