2013-10-14 58 views
0

我一直想知道是否有更好的方法來處理與Rails的一對一關係。處理與控制器的一對一用戶關係

我有一個用戶模型,has_one訂閱。當用戶登錄時,我通過檢索current_user.subscription來獲得訂閱,以便通過URL中的id查找訂閱是不確定的。

現在,當用戶要更新其訂閱,他得到的網址:? /訂閱/ 3/plan_id的數據類型= 2

但認購3 unncessary,和其他的事情是我不希望向用戶顯示訂閱數量(ids)。

什麼會是更好的解決方案呢?你們會爲此感到困擾嗎?

感謝

+0

你能顯示你的routes.rb嗎? – Iralution

回答

1

您可以使用resource :subscriptions(不是資源)。如這裏所描述(link) 不同的是,這resource沒有創建索引的路線(只有當你明確地說,你要一個),也不需要在URL從鏈接答案

報價標識:

在高層次上,資源的意圖是聲明這些資源中只有一個會永遠存在。例如:

resource:profile,:only => [:edit,:update]作爲用戶,我應該只有 能夠更新我自己的配置文件。我永遠不能編輯其他 用戶的配置文件,因此不需要像 /users/1/profile/edit這樣的URL方案。相反,我使用/ profile/edit,並且控制器知道使用當前用戶的ID而不是在URL中傳遞的ID (因爲沒有)。

這就是爲什麼你沒有得到資源的索引操作:只有一個資源,所以>「列出」它們沒有意義。

1

我想你有這樣的事情在你的路由定義

resources :subscriptions 

你想要什麼是這樣定義一個集級別的自定義操作:

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

現在您需要在您的同名控制器中添加一個動作。並且到達那裏的鏈接將會是:/subscription/new_plan?plan_id=2