Ответ 1
1) Быстрое решение вашей проблемы (как показано здесь):
affiliate_links_controller.rb
def index
@links = Admin::AffiliateLink.all # TODO, pagination, etc.
respond_to do |format|
format.html # index.html.erb
format.json do
render json: @links.to_json(:account_tracking_token => account_tracking_token)
end
end
end
AffiliateLink.rb
# I advocate reverse_merge so passed-in options overwrite defaults when option
# keys match.
def as_json(options = {})
json = super(options.reverse_merge(:except => :html_code))
json[:link_with_token] = link_with_token(options[:account_tracking_token])
json
end
2) Более хардкорное решение, если вы действительно пишете API:
- Смотрите эту статью, описывающую вашу проблему.
- Смотрите драгоценный камень, который авторы сделали в качестве решения.
- Посмотрите этот railscast на использование драгоценного камня.
3) И, наконец, удобное решение. Если у вас есть удобное отношение модели, это чисто:
Притворство AffiliateLink belongs_to :user
. И предполагая, что user_token является доступным атрибутом пользователя.
AffiliateLink.rb
# have access to user.user_token via relation
def link_with_token
# some gnarly code that depends on a lot of stuff the model knows
# that returns a proper link
end
def as_json(options = {})
super(options.reverse_merge(:methods => :link_with_token, :except => :html_code))
end
affiliate_links_controller.rb
def index
@links = Admin::AffiliateLink.all # TODO, pagination, etc.
respond_to do |format|
format.html # index.html.erb
format.json do
render json: @links
end
end
end