개별 항목을 관리하기위한 레일스 앱을 만들고 있습니다. 각 항목에는 응용 프로그램의 URL에 사용할 항목 번호 (0으로 채워진 숫자, 4 자리 숫자, 예 : 0002
또는 0212
또는 1002
)가 있습니다. 현재 /items/2
으로 이동하는 경우 id = 2
으로 항목을 가져오고 item_number = 2
으로 항목을 가져 오지 않습니다. 내 routes.rb 파일에는 resources :items
만 포함되어 있습니다. 이 항목 번호로 항목을 끌어낼 수 있도록 내가 어떻게 갈 것입니까?레일즈 URL에 맞춤 식별자 (ID 아님)
1
A
답변
7
는 항목 모델의
to_param
메서드를 재정의
: 당신은 당신의 경로에서 아무것도 변경하지 않아도
def to_param
item_number.to_s
end
. 당신은 그냥 그냥 알다시피 find_by_item_number(params[:id])
사용하여 항목을 찾을해야합니다 :
def to_param
"#{id}-#{name}".parameterize
end
: 당신이 URL에 항목의 이름을 표시하고 싶다면, 다음을 수행 할 수
위대한 점은 "1-item-name".to_i가 1
입니다! 따라서 어디서나 찾기 방법을 변경하지 않아도됩니다.
item = Item.find(1)
item_path(item) # => "/items/1", i.e. the same result as calling item_path(item.id)
그것은 항목에 to_param 인스턴스 메서드를 호출하여이 "마법"을 수행합니다
2
일반적으로는 item_path
도우미 (당신이 resources :items
을 정의하여 무료로 얻을) URL을 구성하는 항목의 ID를 사용 클래스는 기본적으로 항목의 id를 반환합니다.
그래서 다른 것을 원하면 to_param 메서드를 재정의해야합니다. 귀하의 경우에는, 당신이 뭔가를 할 수 있습니다 : 다음
class Item < ActiveRecord::Base
def to_param
item_number
end
end
과 :
item = Item.find_by_item_id('0001')
item_path(item) # => "https://stackoverflow.com/users/0001"
관련 문제
- 1. 클라이언트 ID : 고유 식별자 :
- 2. 레일즈 리다이렉트시 리소스 식별자 삭제
- 3. 맞춤 컨테이너가 그림이 아님
- 4. Android : 사용자 ID 계정 (ID 전화 아님)
- 5. Lucene : 맞춤 ID 할당?
- 6. URL에 사용자 ID 인코딩이 있습니까?
- 7. 레일즈 NoMethodError 브라우저에서는 있지만 콘솔이 아님
- 8. use_trans_sid 작업 만들기 (URL에 세션 ID 추가)
- 9. Google App Engine 증분 식별자 (ID)
- 10. EF4 및 서버 생성 고유 식별자 Id
- 11. Google ID 도구 키트 : createAuthUrl - 잘못된 식별자
- 12. Google 웹 검색 API (맞춤 검색 아님)
- 13. 식별자
- 14. SQL 서버 ID 사양이 순차적이 아님
- 15. google checkout 계속 URL에 맞춤 변수가 표시됩니다.
- 16. Android의 맞춤 URL에 android : scheme이란 무엇입니까?
- 17. AJAX (형식 아님)를 사용하여 레일즈 3 부분 업데이트
- 18. "facebook comment id"가 url에 추가 - inconveniently
- 19. 동일한 URL에 여러 개의 Facebook 앱 ID
- 20. 레일즈 - 드롭 다운에서 링크로 전달되지 않는 ID
- 21. 레일즈 i18n 입력에 대한 유효성 확인 (오류 메시지 아님)
- 22. Google App Engine NDB 맞춤 키 ID
- 23. Bing 맵에 압정으로 맞춤 ID 첨부하기
- 24. form_for 동작에는 편집 작업 중 URL에 .id가 추가됨 - 레일즈 3
- 25. 레일즈 앱의 특정 URL에 대한 액세스를 어떻게 거부합니까?
- 26. Google GData ContactEntry 객체의 고유 ID (식별자)는 무엇입니까?
- 27. 고유 ID 또는 SQL Server 2005의 뷰에 대한 식별자
- 28. 재사용 세션 식별자
- 29. 레일즈 컨트롤러 => params []
- 30. iOS 앱 구매시 - 잘못된 제품 ID "(개발 버전이 아님)
당신은 내가 하려던 말 그대로 무엇을 썼다. 좋은 답변 :) – Andrew
나는 또한 find_by_param'라는 동급 클래스 메서드를 만들 것을 권합니다. – phoet
감사합니다. Robin, 방금 to_param을 반환하여 번호를 업데이트하고 아이템 컨트롤러를 업데이트했습니다. @item = Item.find_by_number (params [: id]), 1023에 호출 된 private 메소드'split '의 NoMethodError를 얻고 있습니다 :/items/1023 – Jack