我想输出一个附属链接列表,每个链接都标记为标识当前用户。它在 HTML 中会很简单,但我们正在编写一个 API,所以输出是 JSON。
我有它的工作,但它似乎过于复杂。这是最好的方法吗?
我的模型 AffiliateLink 包含一个字段(链接的原始 HTML),我将通过添加令牌即时转换和输出该字段。我有一个产生替换的模型方法——这很重要,因为我们使用多个附属公司,每个附属公司都有一个特殊的转换规则,这个方法知道:
def link_with_token(user_token)
# some gnarly code that depends on a lot of stuff the model knows
# that returns a proper link
end
为了在 JSON 中获得正确的链接 html,我做了这些事情:
- 添加
attr_accessor :link_html
到模型 - 添加一个实例方法来设置新的访问器
...
def set_link_html(token)
self.link_html = link_with_tracking_token(token)
end
- 在模型中覆盖
as_json
,将原来的 html_code 替换为 link_html
...
def as_json(options = {})
super(:methods => :link_html, :except => :html_code)
end
- 迭代控制器方法中返回的集合以进行转换
...
def index
@links = Admin::AffiliateLink.all # TODO, pagination, etc.
respond_to do |format|
format.html # index.html.erb
format.json do
@links.each do |link|
link.set_link_html(account_tracking_token)
end
render json: @links
end
end
end
这似乎是为了完成我的青少年转变而要做的很多事情。欢迎提供有用的建议(与此问题有关,而不是与代码的其他方面有关,现在正在不断变化)。