Указание атрибутов объекта Rails, передаваемого в объект JSON - PullRequest
10 голосов
/ 29 января 2012

У меня есть объект в Rails, который имеет атрибуты A, B, C, D и E. Когда я передаю этот объект клиентской стороне через объект JSON, как я могу сказать контроллеру rails включать только атрибуты Aи D в объекте JSON?

В моем контроллере Users мой код выглядит следующим образом:

    @user = User.find(params[:id])

    respond_to do |format|
        format.html
        format.json { render :json => @user}
    end

Этот код работает, однако возвращаемый объект JSON содержит все атрибуты объекта @user.Как я могу ограничить атрибуты, включенные в объект JSON, до того, как что-либо будет отправлено обратно клиенту?

ОБНОВЛЕНИЕ: lucapette обеспечивает хороший фон о том, что происходит за кулисами.Поскольку бывают случаи, когда мне, возможно, понадобятся все атрибуты, я использовал следующий код:

    format.json { render :json => @user.to_json(:only => ["id"])}

Ответы [ 2 ]

15 голосов
/ 29 января 2012
render :json => @user

вызовет to_json для объекта @user. И метод to_json будет использовать метод as_json для своей работы. Таким образом, вы можете легко переопределить as_json, передавая клиентам только то, что вы хотите. Как в следующем:

def as_json options={}
  {
    attr1: attr1,
    attr2: attr2
  }
end
0 голосов
/ 14 декабря 2017

Хороший способ здесь Как выбрать только определенные атрибуты из модели? используя select, чтобы просто получить определенные атрибуты.

Конечно, работает, только если вам не нужны другие атрибуты в коде.В качестве общего способа решения этой проблемы, Rabl стоит посмотреть https://github.com/nesquena/rabl

...