我一直想知道是否有更好的方法来处理与Rails的一对一关系。
我有一个用户模型,其中有一个订阅。当用户登录时,我通过retreiving current_user.subscription获得订阅,因此在URL中按ID查找订阅是不必要的。
现在,当用户想要更新他的订阅时,他获得了网址: /订阅/ 3 /?plan_id的数据类型= 2
但订阅3是不必要的,另一方面是我不想向用户显示订阅(ids)的数量。
什么是更好的解决方案呢?你们会为此烦恼吗?
由于
答案 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中传递(因为没有)。
这就是为什么你没有得到资源的索引动作:只有一个资源,所以> “列出”它们是没有意义的。