2011-03-28 7 views
2

필자는 필연적으로 "1.3.6.1.4.1.25623.1.0.14377"과 같은 ID를 가진 객체를 가지고 있습니다. id (예 : link_to my_object(object.id))를 사용하는 링크를 만들려고 할 때 Rails 3은 barfs를 사용하고 경로가 없다고 말합니다.레일즈 3 숫자가 아닌 ID를 가진 경로

link_to my_object(1)을 시도하여 유효한 경로가 있음을 확인했습니다. Rails는이 링크를 만드는 데 문제가 없습니다.

아이디어가 있으십니까?

미리 감사드립니다.

+0

routes.rb 파일의 모양은 무엇입니까? –

+0

간단한 리소스 문을 가지고 있습니다 ('resources : nvts'). – reedswenson

답변

4

알아 냈습니다 ... 기본적으로 레일스는 매개 변수 필드 (이 경우 id)에 마침표 (.)가 있으면 발생합니다. 이 동작을 변경하려면 route 명령문에 a : constraints 지시문을 추가하고 매개 변수의 모양을 명시하십시오. Avdi Grimm

resources :nvts, :constraints => { :id => /[0-9\.]+/ } 

감사를 그의 가장 도움이 블로그 게시물에 대해 : 내 경우 그것은이 문제를 해결 다음 밝혀졌다.

0

모델에서 to_param 메서드를 재정의해야 할 수도 있습니다. 레일스는이 모델을 사용하여 라우팅 용 ID를 생성합니다. 는 보통은 다음과 같습니다 : 그것은 모델의 이름을 가져옵니다 및 경로에서 ID로 사용

def to_param 
    object.parameterize 
end 

.

+0

그걸로 죄송합니다 ... 레일스는 여전히'ActionView :: Template :: Error (경로가 일치하지 않습니다 {: action => "show", : id => "1.3.6.1.4.1.25623.1. 0.18413 ", : 컨트롤러 =>"nvts "}) :'링크 할 때 '표시', nvt_path (nvt.id)'. 'link_to "Show", nvt_path (1)'는 내가 원하는 것을 렌더링합니다. – reedswenson

+0

이 메서드는 모델 클래스에 있어야합니다. 이렇게하면 ActiveRecord :: Base의 메서드를 재정의 할 수 있습니다. 그런 다음 rails console : your_object.to_param =>에서 모델 이름을 반환해야합니다. – megas

+0

my_object.to_param은 예상대로 ID를 반환합니다. Rails는 여전히 같은 오류를 던지고있다. 내 개체가 ActiveModel :: Base의 자손이 아닙니다. 그게 문제 야? – reedswenson

관련 문제