【问题标题】:Nested resources links in Rails 3Rails 3 中的嵌套资源链接
【发布时间】:2012-01-12 12:18:12
【问题描述】:

我有一些控制器可以在某些模型的“上下文”中工作。示例:控制器 UsersController 和 InvoicesController 可以在公司模型的上下文中工作 - 它们显示某些公司的用户和发票。我使用嵌套资源作为路由解决方案,并拥有像

这样的 URL

http://localhost:3000/companies/8/users

在索引视图上创建链接并反映上下文的最简单灵活的方法是什么?

这意味着 new_user_path 或 新公司用户路径 将根据上下文创建。我不想使用很多 if...then's。 有什么解决办法吗?

【问题讨论】:

  • 您的意思是在您的user index 视图中,如果父类是Companynew_account_user_path,您希望有一个动态方法生成像new_company_user_path 这样的嵌套资源链接如果父类是Account?
  • 对不起,我的意思是 new_company_user_path
  • 如果没有指定上下文(在这种情况下是公司),那么将使用 new_user_path;将使用带有“公司”上下文的 new_company_user_path

标签: ruby-on-rails resources


【解决方案1】:

如果没有任何 if 开关,您将无法逃脱,但您可以编写一个帮助程序以至少将其排除在您的视图代码之外。

我建议您查看 Rails 中的 url_for 助手,并在这样的助手中使用它:

def conditional_path(action)
  if (params[:company_id]
    url_for(:controller => 'users', :action => action, :company_id => params[:company_id])
  else
    url_for(:controller => 'users', :action => action, :invoice_id => params[:invoide_id])
  end
end

这样的东西,你可以用你的助手随心所欲地变出你想要的样子

【讨论】:

  • 为我工作:= url_for :controller => 'invoices', :action => 'show', :id => 123, :company_id => params[:company_id] = url_for :controller = > 'users', :action => 'show', :id => 123, :company_id => 参数[:company_id]
【解决方案2】:

如果我理解正确,您可以使用数组路由保持简洁:

= link_to 'Whatever', [:new, @company, @account, @user]

如果@company 存在,您将获得 new_company_user_path,如果@account 存在 new_account_user_path 或者如果没有 new_account_path 等。我不在我的开发组中,因此无法测试。

【讨论】:

    猜你喜欢
    • 2014-05-14
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多