나는 런타임에 다른 URL의 매핑을 만드는 작업이 있습니다.
응용 프로그램에서 routes.rb 파일의 경로 목록을 표시하는 GUI 인터페이스가 있습니다.
사용자는 해당 URL을 인터페이스 (예 :
)와 다른 이름으로 변경할 수 있습니다. (abc/mno) - 사용자가 - (hello)
으로 변경할 수 있습니다. 브라우저 요청의/hello 사용자 유형이/abc/mno로 리디렉션 된 경우
이 매핑 된 경로를 데이터베이스에 저장해야합니다.
routes.rb 파일을로드하는 동안 데이터베이스에서 경로를 추가하는 방법. 데이터베이스에 새 레코드를 만드는 동안 이미 정의 된 경로 (routes.rb)에 동적으로 매핑 된 경로를 추가하는 방법. 내가 그것을 데이터베이스에서 경로를 포함 할 수 있도록 기본 라우터를 확장하는 방법을 알아낼 수 없습니다입니다
..rails3에서 동적 경로와 도우미를 만드는 방법
3
A
답변
1
난 당신을위한 완벽한 솔루션이없는,하지만 당신은 두 가지 방법으로 시작할 수 있습니다
를- 를 사용하여 사용자 정의 URL 제약 : Dynamic URL -> Controller mapping for routes in Rails
- 를 사용하여 랙 미들웨어 : 당신은 랙 미들웨어를 사용하지 않을 경우 Dynamic Rails routing based on database
1
, 당신은 제약 조건을 사용할 수 있습니다. 다행히도 동적 경로의 범위는 "/ abc/동적 인 내용이 될 수 있습니다."과 같은 의미로 사용됩니다.
그래서, 사용자의 이름을 기반으로하는 동적 경로라면 다음을 수행합니다.
#config/routes.rb
match '/abc/:route' => "abc#dynamicroute", :contraints => DynamicRouteConstraint.new
#lib/dynamic_route_constraint.rb
class DynamicRouteConstraint < Struct.new
def matches?(request)
User.find_by_first_name(request.params[:route]).present?
end
end
#app/controllers/abc_controller.rb
class AbcController < ApplicationController
def dynamicroute
@user = User.find_by_first_name(params[:route])
#render or redirect, however you wish
end
end
+0
새 개체를 인스턴스화 할 필요가 없으며 클래스 메서드를 호출 할 수 있습니다. 내 대답을 +1하면 내 자신의 솔루션을 구현하는 데 영감을 받았습니다! – Cyzanfar
모든 라우팅을 처리하는 컨트롤러를 만드는 문제는 .. 사용자가 gui에서 매핑을 생성 할 때 매핑이 반영 될 때까지 다시 시작하지 않습니다. 서버를 다시 .. 다른 path_helpers도 사용할 수 없습니다 – sanjee
@ BlueSmith BlueSmith에 의해 게시 된 두 번째 링크는 꽤 많이 죽었습니다. 표시된 예는 좋은 시작점이며, 변경 사항은 원하는대로 수행해야합니다. – RadBrad