2010-11-22 117 views
0

我正在用Rails制作一个JSON API,除了当我使用respond_with自定义类(不是ActiveRecord继承的类)之外,它似乎可以正常工作。如何在Rails 3中使用自定义类的respond_with?

这里是我的类:

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正在让我发疯。

+0

做了一些清理,使其更具可读性和问题的标题。 – 2010-11-22 21:06:06

+0

感谢您的帮助! – Danny 2010-11-22 21:17:24

回答

1
  1. 你的类应该响应to_json方法

  2. 显然设置:在respond_with方法位置选项。 Rails尝试从传递给方法的对象中创建平稳的路由,但由于您的对象不是资源,所以会引发错误。

0

我不知道如果这有助于但是我没有看到的respond_to ... respond_with用的respond_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”类...

只是一个想法...

+0

我有respond_to,我只是没有显示控制器的那一部分 – Danny 2010-11-22 23:26:02

相关问题