2016-01-21 4 views
0

У меня есть две модели: кабинет и рабочее место.Rails to_json принадлежит_объекту

class Cabinet < ActiveRecord::Base 

    def as_json(options={}) 
    options.merge!({except: [:created_at, :updated_at]}) 
    super(options) 
    end 

end 

class Workplace < ActiveRecord::Base 
    belongs_to :cabinet 

    def as_json(options = {}) 
    options.merge!(:except => [:created_at, :updated_at, :cabinet_id], include: :cabinet) 
    super(options) 
    end 

end 

Когда я позвонил Cabinet.first.to_json я

{ 
    id: 1, 
    cabinet: "100" 
} 

, но когда я назвал Workplace.first.to_json идентификатор получить

{ 
    name: "first workplace", 
    Cabinet: { 
      id: 1, 
      cabinet: "100", 
      created_at: "#created_at", 
      updated_at: "#updated_at" 
      } 
} 

Почему это? Спасибо и извините за мой английский :)

ответ

0

Не уверен, что я следую за вами, но вы хотите получить только атрибуты из модели Workplace, а не данные кабинета, когда вы работаете Workplace.first.to_json?

Я думаю, это потому, что вы включили кабинет в конфигурацию метода as_json, как описано here.

Вы должны либо удалить его или сделать это:

Workplace.first.attributes.to_json 

Позвольте мне знать, если я что-то из вашего вопроса не хватает.

+0

Извините, я ошибаюсь, чтобы задать вопрос. Я получить объект кабинета без created_at и updated_at полей: '' '{ имени: "первое рабочее место", кабинета: { ID: 1, кабинета: "100" } }' '' – motoroller

0

Предположим, что ваша модель Cabinet имеет :id, :cabinet, :created_at, :updated_at атрибутов и Workplace имеет :id, :name, :cabinet_id, .....

Теперь, если вы пытаетесь стрелять Cabinet.first.to_json, конечно он будет оказывать следующее:

{ 
    id: 1, 
    cabinet: "100" 
} 

becuase что атрибуты принадлежит Cabinet модели. Затем вы также добавили эту строку кода options.merge!({except: [:created_at, :updated_at]}), поэтому она отображает только :id and :name атрибутов. И если вы пытаетесь стрелять Workplace.first.to_json, то он будет оказывать:

{ 
    name: "first workplace", 
    Cabinet: { 
     id: 1, 
     cabinet: "100", 
     created_at: "#created_at", 
     updated_at: "#updated_at" 
     } 
} 

потому, что из этих options.merge!(:except => [:created_at, :updated_at, :cabinet_id], include: :cabinet). Вы включаете модель Cabinet, поэтому она будет автоматически добавлена ​​в ваш json.

+0

я неправильно поставить вопрос. Я переопределяю метод Cabinet.as_json, но в этом вызове Workplace.first.to_json (include:: cabinet) не называется Cabinet.as_json, а в результате объекта json включаются поля created_at и updated_at. – motoroller

Смежные вопросы