Подтвердить что ты не робот

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))
4b9b3361

Ответ 1

Вы можете добавить атрибут 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?)

Ответ 2

Приемы to_json не предназначены для тех, которые принимают аргументы, а просто "getter". (Как правило, те, которые созданы на основе ваших атрибутов db.)

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

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

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