私はルート(例えばresource /:id)でidを文字列として使用していますが、idはリソースをid =新しい、新しいリソースを作成するよう指示します。新しいリソースを作成する際に、ユーザーがid = newを選択しないようにするにはどうすればよいですか?あなたはあなたが必要なルートを取得しますRails:メソッドとの矛盾を回避する
resources :resources
:
私はルート(例えばresource /:id)でidを文字列として使用していますが、idはリソースをid =新しい、新しいリソースを作成するよう指示します。新しいリソースを作成する際に、ユーザーがid = newを選択しないようにするにはどうすればよいですか?あなたはあなたが必要なルートを取得しますRails:メソッドとの矛盾を回避する
resources :resources
:
私はあなたの代わりに
最初のIDの文字列を設定することができる3つの解決策を考えることができます、はidとATTRIBUTE_NAMEの組み合わせを設定してモデルに を追加
def to_param
return [self.id, self.attr_name].join('-')
end
第2:コントローラにアクションメソッドを追加しないようにします(これは安全です)。ハンは、あなたが)将来的に
validates :attr_name, exclusion: { in: YourController.action_methods.to_a }
第三に、他のgetメソッドを追加することが唯一の "新しい" 方法を制限: 使用friendly_id宝石
ありがとう!サンプルコードをくれたことに本当に感謝しています。 –
は、config.rb
ではモデルでexclusion
検証、http://guides.rubyonrails.org/active_record_validations.html#exclusion
を使用するようにルートを変更してください。私はすぐにcreate
とedit
のようにそれに付属の他のいくつかを必要とする気がします。
編集:あなたのモデルでは、人生を容易にするために:
my_string_id
はあなたが識別子としてURLで使用している文字列です
def to_param
return self.my_string_id
end
。これにより、URLは数値IDの代わりに:id paramとして使用されます。
参照:http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-default
を追加し ':before_filterを:check_new、:のみ=> [ :new] '&新しいアクションへのルーティングを防ぎます。 –