2016-03-28 57 views
0

我在路由中使用字符串作爲id(例如resource /:id),但id也可以是'new'(我的Controller中的一種方法),而不是顯示id =新的,指導創造新的資源。如何限制用戶在創建新資源時選擇id = new?Rails:防止ID與方法衝突

+0

添加一個':的before_filter:check_new,:只=> [ :新]'並防止路由到新的行動。 –

回答

2

我能想到的三種解決方案,您可以設置的,而不是ID

第一個字符串:設定的ID和屬性名稱的組合,在模型中添加

def to_param 
    return [self.id, self.attr_name].join('-') 
end 

第二:阻止用戶在您的控制器中添加任何操作方法(這是更安全的t漢限制只有 「新」 的方法,你可以在將來添加其他get方法)

validates :attr_name, exclusion: { in: YourController.action_methods.to_a } 

三: 使用friendly_id寶石

+0

非常感謝!我非常感謝你給出了示例代碼。 –

1

config.rb,改變你的路線:

resources :resources 

你會得到你需要的路線。我有一種感覺,你很快就會需要一些與它一起出現的,如createedit

編輯:讓生活更簡單,在你的模型:

def to_param 
    return self.my_string_id 
end 

哪裏my_string_id是您正在使用的URL作爲標識符的字符串。這將使URL使用:id參數而不是數字ID。

參見:http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default