Прежде чем идти дальше, я погуглил это.Я знаю аргументы, почему вы не должны располагать url_for в модели, так как это, по-видимому, нарушает парадигму MVC.В этом случае я не согласен, так как он функционирует скорее как API для некоторых ресурсов, а не как пользовательский интерфейс.
Я создал собственный респондент и возвращаю объект 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,
}
Я хочу, чтобы у каждого из объектов, на которые отвечает контроллер (используя response_with), был заключен URL-адрес, чтобы на стороне клиента я мог легко отслеживать, куда отправлять дополнительные запросы для данного объекта (этот случай захватывает различные представления представлений в зависимости от того, какой виджет подписан на состояние этого объекта).
Я думаю, что лучший способ сделать это - на стороне модели, так как кажется, что Rails этого хочет.Просто добавьте функцию с URL-адресом, а затем используйте as_json (: method =>: url).К сожалению, url_for недоступен на стороне модели, и я не смог найти совместимый с Rails3.1 способ включения его в ActiveRecord :: Base.
class << ActiveRecord::Base
def url
url_for self
end
end
Model.new.as_json(:includes => :url)
Я также открыт для альтернативных предложений.