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))
Ответы
Ответ 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.