現在のユーザーを識別するためにタグ付けされたアフィリエイト リンクのリストを出力したいと考えています。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
これは、私の十代の若者の変身を成し遂げるためだけにやるべきことがたくさんあるようです. 役に立つ提案 (この問題に関するものであり、現在流動的なコードの他の側面に関するものではありません) を歓迎します。