Ruby to_json: методы аргументы

Я использую 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 ответа

Решение

Можете добавить current_user attribute to your model and set it before executing 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?)

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

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

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

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

Другие вопросы по тегам