首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails路由全局帐户id

Rails路由全局帐户id
EN

Stack Overflow用户
提问于 2013-02-14 03:11:55
回答 2查看 294关注 0票数 0

我的rails应用程序是基于帐户的。因此,每个用户都属于一个帐户,每个项目等等。

目前,我有这样的路由:

代码语言:javascript
复制
/mission-control
/tasks
/projects

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

代码语言:javascript
复制
/:account_id/mission-control
/:account_id/tasks
/:account_id/projects

我知道我可以写:

代码语言:javascript
复制
resource :accounts do
  resource :tasks
end

但这将以例如

代码语言:javascript
复制
/accounts/1/tasks

希望有人能帮我写路由!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-24 17:29:39

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

首先,我需要定义作用域,如下所示:

代码语言:javascript
复制
scope ":account_id" do
  resources :tasks
  resources :projects
end

然后,为了让一切正常工作,在循环中创建链接,如下所示:

代码语言:javascript
复制
<%= link_to "Project", project %>

将不起作用,您需要在应用程序控制器中设置默认url选项:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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

票数 2
EN

Stack Overflow用户

发布于 2013-02-14 03:32:37

你可以这样做一个作用域:

代码语言:javascript
复制
scope ":account_id" do
  resources :tasks
  resources :projects
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14861161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档