处理与控制器的一对一用户关系

时间:2013-10-14 10:37:08

标签: ruby-on-rails ruby-on-rails-4

我一直想知道是否有更好的方法来处理与Rails的一对一关系。

我有一个用户模型,其中有一个订阅。当用户登录时,我通过retreiving current_user.subscription获得订阅,因此在URL中按ID查找订阅是不必要的。

现在,当用户想要更新他的订阅时,他获得了网址: /订阅/ 3 /?plan_id的数据类型= 2

但订阅3是不必要的,另一方面是我不想向用户显示订阅(ids)的数量。

什么是更好的解决方案呢?你们会为此烦恼吗?

由于

2 个答案:

答案 0 :(得分:1)

我猜你的路线中有这样的东西

resources :subscriptions

您想要的是一个集合级自定义操作,其定义如下:

resources :subscriptions do
  get 'new_plan', on: :collection
end

现在您需要在同名的You控制器中添加一个动作。到达那里的链接将是:/subscription/new_plan?plan_id=2

答案 1 :(得分:1)

您可以使用resource :subscriptions(不是资源)。如此处所述(link) 不同的是,resource不会创建索引路由(只有当您明确说明您想要一个)并且不需要URL中的ID

来自链接答案的引用:

  

在高层次上,资源的意图是声明只有一个   这些资源将永远存在。例如:

     

资源:个人资料,:only => [:edit,:update]作为用户,我应该只   能够更新我自己的个人资料。我永远不能编辑其他   用户的个人资料,因此不需要像这样的URL方案   /用户/ 1 /型材/编辑。相反,我使用/ profile / edit,和   controller知道使用当前用户的ID而不是ID   在URL中传递(因为没有)。

     

这就是为什么你没有得到资源的索引动作:只有一个资源,所以> “列出”它们是没有意义的。