2015-12-01 45 views
0

在我的搜索控制器中,我使用json渲染调用进行站点搜索。我现在需要将自定义实例方法传递给JS文件。问题是,当我尝试逗号分隔的必要方法(to_json)我得到这个错误在我的控制台:对json响应控制器动作使用多个参数

SyntaxError (/game_app/app/controllers/search_controller.rb:13: syntax error, unexpected '}', expecting =>): 
    app/controllers/search_controller.rb:13: syntax error, unexpected '}', expecting => 

控制器代码

def autocomplete 
    render json: Game.search(params[:query], fields: [{ title: :word_start }], limit: 10), Game.to_json(methods: [:box_art_url]) 
end 

型号代码

class Game < ActiveRecord::Base 
    def box_art_url 
    box_art.url(:thumb) 
    end 
end 
+0

使用ActiveModel序列化器或jBuilder。在您的控制器中创建复杂的JSON响应几乎不是一个好主意。 – max

+0

我该如何去将jbuilder文件与我需要使用的javascript相互关联? –

+0

您将使用ajax从javascript获取搜索数据作为JSON。 jBuilder的工作类似于一个视图 - 除了它生成JSON或XML而不是HTML。 – max

回答

1

这就是你将如何解决ActiveModelSerializers的问题。

# Gemfile 
# ... 
gem 'active_model_serializers' 

# app/controllers/games_controller.rb 
# ... 
def autocomplete 
    @games = Game.search(params[:query], fields: [{ title: :word_start }], limit: 10) 
    render json: @games 
end 

# app/serializers/game_serializer.rb 
class GameSerializer < ActiveModel::Serializer 
    attributes :title, :box_art_url 
end 

如果你要使用的游戏VS正常表示搜索结果表示不同的序列化,你可以指定串行:

# app/controllers/games_controller.rb 
# ... 
def autocomplete 
    @games = Game.search(params[:query], fields: [{ title: :word_start }], limit: 10) 
    render json: @games, each_serializer: GameSearchResultSerializer 
end 
相关问题