Ruby to_json: методы аргументы - PullRequest
24 голосов
/ 30 апреля 2010

Я использую метод to_json для объекта и пытаюсь заставить работать аргумент :methods. У меня есть метод на моей модели (Drop) под названием is_favorited_by_user?. Этот метод принимает аргумент current_user, а затем проверяет, является ли удаление предпочтительным для пользователя. Как я могу передать этот аргумент через метод to_json.

render :json => @drops.to_json(:methods => :is_favorited_by_user?(current_user))

Ответы [ 2 ]

44 голосов
/ 30 апреля 2010

Вы можете добавить атрибут current_user к вашей модели и установить его перед выполнением to_json

  attr_accessor :current_user

  def is_favorited_by_user?(user=nil)
    user ||= current_user
    # rest of your code
  end


@drops.current_user = current_user
render :json => @drops.to_json(:methods => :is_favorited_by_user?)
4 голосов
/ 30 апреля 2010

Методы, которые принимает to_json, предназначены не для аргументов, а для методов "получения". (Обычно они создаются на основе ваших атрибутов БД.)

См. Примеры здесь, ни один не передает аргументы:

http://apidock.com/rails/ActiveRecord/Serialization/to_json

Если вы хотите сделать что-то нестандартное, вам нужно создать метод, который создает хеш информации, который вы хотите, а затем преобразовать этот хеш в json.

...