我在路由中使用string作为id(例如resource /:id),但id也可以是'new'(我的Controller中的一个方法),而不是显示id = new的资源,指示创建新资源。如何限制用户在创建新资源时选择id = new?
答案 0 :(得分:2)
尝试在模型http://guides.rubyonrails.org/active_record_validations.html#exclusion
中使用exclusion
验证
答案 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
您将获得所需的路线。我有一种感觉,你很快就会需要其他一些附带的内容,例如create
和edit
。
编辑:在您的模型中让生活更轻松:
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