Как я могу использовать response_with с пользовательскими классами в Rails 3? - PullRequest
0 голосов
/ 22 ноября 2010

Я делаю JSON API с Rails, и он, кажется, работает нормально, за исключением случая, когда я использую respond_with пользовательские классы (не наследуемые ActiveRecord).

Вот мой класс:

class JsonResponse
  def initialize(data, status)
    @data = data
    @status = status
  end

  def as_json(options={})
    {
      :data => @data,
      :status => @status
    }
  end
end

, который является простой оболочкой ответа. Когда я пытаюсь сделать это:

def create
  unless(Match.find_by_user_id(params[:user_id]))
    Match.create(:user_id => params[:user_id])
  end
  time_response = JsonResponse.new("5", "success")
  respond_with(time_response)
end

Я получаю эту ошибку:

NoMethodError (undefined method `model_name' for JsonResponse:Class):
  app/controllers/matches_controller.rb:9:in `create'

Есть идеи? respond_with сводит меня с ума.

Ответы [ 2 ]

1 голос
/ 10 декабря 2010
  1. Ваш класс должен ответить на метод to_json

  2. Очевидно установлено: опция местоположения в методе response_with. Rails пытается создать спокойный маршрут от объекта, который вы передаете методу, но поскольку ваш объект не является ресурсом, возникает ошибка.

0 голосов
/ 23 ноября 2010

Я не уверен, помогает ли это, но я не вижу response_to ... response_with работает вместе с response_to ...

 respond_to :html, :xml, :json 

Это можно определить на уровне контроллера

пример:

 class UsersController < ApplicationController::Base

  respond_to :html, :xml, :json

  def index
    respond_with(@users = User.all)
  end

  def create
    @user = User.create(params[:user])
    respond_with(@user, :location => users_url)
  end
end

и затем вы можете определить свой шаблон json ... не знаю, если оставить шаблон json пустым, если он принимает ваш класс "JSONResponse" ...

простомысль ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...