0

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

我有一个用户模型,它有一个订阅。当用户登录时,我通过检索 current_user.subscription 来获取订阅,这样就无需在 URL 中通过 id 查找订阅。

现在,当用户想要更新他的订阅时,他会得到 url:/subscription/3/?plan_id=2

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

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

谢谢

4

2 回答 2

1

您可以使用resource :subscriptions(不是资源)。如此处所述(链接)不同之处在于,resource它不会创建索引路由(仅当您明确表示您想要一个时)并且不需要 url 中的 ID

引用链接的答案:

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

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

这就是为什么您没有使用资源获得索引操作的原因:只有一个资源,所以 > “列出”它们没有任何意义。

于 2013-10-14T11:30:03.270 回答
1

我猜你在你的路线中定义了这样的东西

resources :subscriptions

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

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

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

于 2013-10-14T11:20:37.610 回答