앞으로 나아 가기 전에 나는 이것을 봤습니다. MVC 패러다임을 위반 한 것처럼 모델에 url_for가 없어야하는 이유에 대한 주장을 알고 있습니다. 이 인스턴스에서는 UI가 아닌 일부 리소스에 대해 API로 더 많이 기능하므로 동의하지 않습니다.모델에 대한 JSON의 url_for이
나는 사용자 정의 응답을 만든 및 요청에 따라 다음과 같습니다 JSON 개체를 반환하고는 :
obj = {
json: resource.as_json,
request_url: params[:id] ? resource_url : collection_url,
partial: get_partial(:partial, options),
flash: flash,
flash_partial: get_partial(:flash, options),
user: @current_user,
status: response.status,
}
나는 컨트롤러가 URL을 동봉 가지고 (respond_with 사용)로 응답 객체의 각을 원한다 그래서 클라이언트 측에서 주어진 객체에 대한 추가 요청을 보내는 위치를 쉽게 추적 할 수 있습니다 (이 경우 해당 객체의 상태에 가입 한 위젯에 따라 다른 뷰 표현을 얻습니다).
레일스가 원했던 것처럼 보이는 가장 좋은 방법은 모델 측면에 있다고 생각합니다. url과 함께 함수를 추가 한 다음 as_json (: methods => : url)을 사용하면됩니다. 불행하게도, url_for는 모델 측에서 사용할 수 없으며 Rails3.1 호환 방법을 ActiveRecord :: Base에 포함시키는 방법을 찾을 수 없었습니다.
class << ActiveRecord::Base
def url
url_for self
end
end
Model.new.as_json(:includes => :url)
다른 대안도 있습니다.
이 작동하는 것 같다