2016-03-28 8 views
0

私はルート(例えばresource /:id)でidを文字列として使用していますが、idはリソースをid =新しい、新しいリソースを作成するよう指示します。新しいリソースを作成する際に、ユーザーがid = newを選択しないようにするにはどうすればよいですか?あなたはあなたが必要なルートを取得しますRails:メソッドとの矛盾を回避する

resources :resources 

+0

を追加し ':before_filterを:check_new、:のみ=> [ :new] '&新しいアクションへのルーティングを防ぎます。 –

答えて

2

私はあなたの代わりに

最初の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宝石

+0

ありがとう!サンプルコードをくれたことに本当に感謝しています。 –

1

を使用するようにルートを変更してください。私はすぐにcreateeditのようにそれに付属の他のいくつかを必要とする気がします。

編集:あなたのモデルでは、人生を容易にするために:

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