0

我的 Rails 应用程序基于帐户。所以每个用户都属于一个帐户,每个项目等等。

目前我的路线如下:

/mission-control
/tasks
/projects

我正在获取用户的当前帐户。由于用户应该能够拥有许多帐户的权限,因此我希望拥有以下路线:

/:account_id/mission-control
/:account_id/tasks
/:account_id/projects

我知道我可以写:

resource :accounts do
  resource :tasks
end

但这最终会出现在例如

/accounts/1/tasks

希望有人可以帮助我如何为此编写路线!

4

2 回答 2

2

现在我得到了正确的方法:

起初我需要定义范围,如:

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

于 2013-02-24T09:29:38.880 回答
1

你可以做一个这样的范围:

scope ":account_id" do
  resources :tasks
  resources :projects
end
于 2013-02-13T19:32:37.330 回答