Хотите ответить в формате json моего вложенного вложенного атрибута Rails - PullRequest
2 голосов
/ 11 марта 2011
class Contact < ActiveRecord::Base
   has_many :contact_company_profiles, :dependent => :destroy
   accepts_nested_attributes_for :contact_company_profiles, :allow_destroy => true
   has_many :companies, :through => :contact_company_profiles

   has_many :phones, :as => :phoneable, :dependent => :destroy
   accepts_nested_attributes_for :phones
end
class ContactCompanyProfile < ActiveRecord::Base
  belongs_to :contact
  belongs_to :company

end

class Company < ActiveRecord::Base
  has_many :contact_company_profiles
  has_many :contacts, :through => :contact_company_profiles

  has_many :phones, :as => :phoneable, :dependent => :destroy
end

Для указанных выше моделей я хочу отвечать в формате JSON через контроллер контактов, код работал нормально до тех пор, пока я не получал доступ к указанным ниже командам.

@contacts = Contact.find(:id)

respond_to do |format|
  format.html
  format.js
  format.json { render :json=>@contacts.to_json(:include=>[:companies, :phones) }
  format.xml { render :xml => @contacts }
end

Но теперь я хочу json ofвложенный телефонный элемент компании в моем контроллере контактов.Так что кинды помогите мне в этом вопросе.Спасибо

1 Ответ

2 голосов
/ 13 марта 2011

Когда я работаю над такой проблемой, я часто перезаписываю serializable_hash

Этот метод используется при генерации json и xml.Вы просто создаете хеш, содержащий все, что вы хотите.Я часто добавляю то, что хочу, и передаю оригиналу.Плюс, таким образом, вам никогда не придется думать об этом в контроллере.Вы всегда можете просто вернуть его, и объект поступит правильно.

 def serializable_hash(options = {}) 
    # TODO exclude the id
    options = {:include => [:address], 
      :except => [:created_at, :updated_at, :creating_user_id]}.merge(options ||= {})
    super options
  end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...