2015-12-01 3 views
0

В моем контроллере поиска я использую вызов рендеринга json для поиска по сайту. Теперь мне нужно передать специальный метод экземпляра в файл JS. Проблема заключается в том, когда я пытаюсь запятая отделить нужный метод (to_json) Я получаю эту ошибку в моей консоли:Использование нескольких аргументов для действия контроллера json response.

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 для извлечения данных поиска как JSON из javascript. 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 

В случае, если вы хотите использовать другой сериалайзер для представления результатов поиска игр против нормального представления можно указать сериалайзер:

# 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