2016-03-28 17 views
0

Rotalarda dize olarak kimliği kullanıyorum (örn. Resource /: id), ancak id aynı zamanda id = ile kaynağı göstermek yerine 'new' (Controller'ımdaki bir yöntem) de olabilir Yeni, yeni kaynak oluşturmaya yönlendirir. Yeni kaynak oluştururken kullanıcıların kimliği = yeni seçmesini nasıl kısıtlayabilirim? İhtiyacınız yolları alırsınızRaylar: Kimlik çakışmasını bir yöntemle önleyin

resources :resources 

:

+0

eklemek ': before_filter: check_new,: Sadece => [ : yeni] 've yeni eyleme yönlendirmeyi engelle. –

cevap

2

Ben bunun yerine

İlk id dizesi ayarlayabilirsiniz üç çözümleri düşünebilirsiniz:, kimliği ve ATTRIBUTE_NAME bir arada set Modelinizdeki eklemek

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

İkinci:, denetleyicinizde herhangi bir işlem yöntemi eklemesini engeller (bu daha güvenlidir. han, siz) gelecekte

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

Üçüncü diğer get yöntemi ekleyebilir sadece "yeni" yöntemi kısıtlayan: kullanım friendly_id mücevher

+0

Çok teşekkürler! Örnek kod verdiğiniz için teşekkür ederim. –

1

kullanmak için rotanızı değiştirmek için deneyin. Kısa bir süre sonra, create ve edit gibi diğerleriyle birlikte gelenlere ihtiyacın olacak.

Düzenleme: Modelinizdeki, hayatı kolaylaştırmak için: my_string_id Eğer tanımlayıcı olarak URL'de kullandığınız dizedir

def to_param 
    return self.my_string_id 
end 

. Bu, URL'yi, sayısal kimlik yerine: id parametresi olarak kullanır.

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

İlgili konular