2013-03-31 3 views
0

레일에 다형 컨트롤러가 있고 제 질문은 요청자의 범위를 얻는 방법이 있습니까? 예를 들어, 회람은 /users/1/messages이고 요청은 해당 컨트롤러의 MessagesController으로 이동하여 경로의 users 부분을 가져 오는 방법이 있습니까? 또는이 경우 또는 다른 것일 수도 있습니다.레일 컨트롤러에서 경로 범위를 가져 오는 방법이 있습니까

이 경우 'POST'/ users/1/messages '는 아마도 관리자로부터 사용자에게 전달되는 메시지이기 때문에 if 문 구조를 설정할 수 없습니다.

+1

이됩니다 방금 문자열을 얻으려고 노력 '사용자'? 그렇다면 당신은'request.url'을 파싱 할 수 있습니다. – ramblex

+0

흠 ... 나는 그 일을하는 데 대단히 반대하지 않습니다. 나는 좀 덜 해킹 할 수있는 일을하기를 바랬지 만 그것은 저에게 효과적입니다. – OneChillDude

답변

1

일반적으로 당신이 타입 필드 (예를 들어, messagable_type를) 했어야 메시지 인스턴스는 사용자의 ID에 지점이됩니다 해당 클래스 (예를 들어, User)와 id 필드 (예를 들어, messagable_id)가 있습니다. 메시지 인스턴스를 요청할 수 있습니다.

message.messagable 
=> user 

사용자 인스턴스를 반환합니다.

이 같은 URL이있는 경우 : /users/1/messages 당신이 사용하려는이이 에피소드에서 라이언 베이츠에 의해 주어진 솔루션입니다

def load_messagable 
    resource, id = request.path.split('/')[1,2] 
    @messagable = resource.singularize.classify.constantize.find(id) 
end 

: http://railscasts.com/episodes/154

+0

흥미 롭다. 나는 그것을 좋아한다. 그리고 내 사이트의 다음 버전에서는 컨트롤러를 말라 버리는 데 확실히 사용할 것이다. – OneChillDude

관련 문제