Если вы просто хотите включить объект TweetsLocation в свой вывод JSON, вы можете использовать опцию :include
для as_json
, например:
@tweet = Tweet.find 1
@tweet.as_json :include => :location
Если, однако, вы хотите включить TweetsLocationатрибуты, как если бы они были атрибутами самого твита, это немного сложнее, но у вас есть несколько вариантов:
Во-первых, вы можете делегировать нужные атрибуты в TweetsLocation, например:
class Tweets < ActiveRecord::Base
has_one :location, :primary_key => "twitter_message_id",
:foreign_key => "twitter_message_id"
# if TweetsLocation has e.g. "name" and "coordinates" attributes
delegate :coordinates, :name, :to => :location, :prefix => true
end
Таким образом, вывод @tweet.as_json
будет иметь клавиши location_name
и location_coordinates
.
Во-вторых, вы можете переопределить as_json
, чтобы выполнить массаж JSON любым способом, например:
class Tweets < ActiveRecord::Base
# ...
def as_json options = {}
# just merge all of TweetsLocation's attributes into the output
attributes.merge(location.attributes).to_json options
end
end