Rails:使用方法防止id冲突

时间:2016-03-28 13:59:11

标签: ruby-on-rails ruby rubygems

我在路由中使用string作为id(例如resource /:id),但id也可以是'new'(我的Controller中的一个方法),而不是显示id = new的资源,指示创建新资源。如何限制用户在创建新资源时选择id = new?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

我可以想到三个解决方案,你可以设置字符串而不是id

首先:设置id和attribute_name的组合,添加 在你的模型中

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

第二:阻止用户在您的控制器中添加任何操作方法(比仅限制" new"方法更安全,您可以添加其他get方法在将来)

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

<强>第三 使用friendly_id gem

答案 2 :(得分: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