アクティブなレコードオブジェクトに配列を追加します

マイケル・カラバエフ

次のようなCampaign#showアクションがあるとします。

 def show
   @campaign = Campaign.find(params[:id])
 end

YouTube APIから取得し、変数で記述した情報をビューに表示したいので、Campaign#showは次のようになります。

def show
  @campaign = Campaign.find(params[:id])
  @views = Campaign.youtube_info(@campaign.url) # this class method of Campaign
end

しかし、便宜上、@ campaignと@viewsをマージして、@ campaignにこの@campaign [:views] [:view_count]のようなものを入れたいと思います。

私が理解したように、@ campaingはActiveRecordオブジェクトであり、@ viewsはハッシュであり、そのようなマージを行うことは許可されていません。

この状況での最善のアプローチは何ですか?

前もって感謝します。

meagar

まず、通常のRailsアプリの一部として、任意の数のオブジェクトをビューに渡します。使用して、すべての何も間違ってあります@viewsとは@campaign

しかし、あなたの場合、物事は非常に奇妙に書かれています。

1つはviews、のメソッドである必要があり、をCampaign呼び出すだけyoutube_infoです。

youtube_infoクラスのインスタンスからプロパティを入力する必要があるため、クラスレベルのメソッドであるのは奇妙ですこれはインスタンスメソッドである必要があり、ビューでそのメソッドを呼び出すだけです。

呼び出しごとにAPIへの追加の呼び出しを防ぎたい場合は、最初の呼び出しの結果をキャッシュします。メソッドの戻り値を「キャッシュ」するプロセスはメモ化と呼ばれ、Rubyの世界で多くのことが書かれています。以下は、Rubyで非常に一般的なパターンです。

class Campaign < ActiveRecord::Base
  def youtube_info
    @youtube_info ||= perform_some_api_request(@url)
  end

  def views
    youtube_info['views']
  end
end

メソッドは、最初に実行されたときにyoutube_infoのみメソッドを呼び出しperform_some_api_requestます。結果はに割り当てられてから@youtube_info返されます。後続の各呼び出しは@youtube_info、偽以外の値に設定されている場合、テストして返します。への各呼び出しviewsは単にを呼び出しyoutube_info、最初の呼び出しのみがAPI呼び出しを実行します。

同じ手法を使用して、コードを記述したままにして、代わりにクラスレベルのメソッドを呼び出すこともできますが、お勧めしません。

class Campaign < ActiveRecord::Base
  def self.youtube_info(url)
    # ...
  end

  def views
    @views ||= Campaign.youtube_info(@url)['views']
  end
end

しかし、最初の例の方が優れています。youtube_infoクラスレベルのメソッドになる理由は実際にはありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Rubyはアクティブなレコードまたはオブジェクトの配列をハッシュの配列に変換します

分類Dev

出力するアクティブレコードオブジェクトに仮想属性を追加します

分類Dev

アクティブレコード配列からオブジェクトを削除する

分類Dev

参照IDなしでアクティブレコードオブジェクトを保存する

分類Dev

角度jsを使用して、プロパティのオブジェクトとオブジェクトの配列にオブジェクトを追加します

分類Dev

Rails 4アクティブレコード。シリアル化された配列属性が別の配列に含まれているかどうかを確認して、オブジェクトを検索します

分類Dev

NSMutable配列にオブジェクトを追加し、ディープコピーします

分類Dev

forループと配列を使用してオブジェクトにプロパティを追加します

分類Dev

オブジェクト配列jQueryのレコードを削除します

分類Dev

レデューサーを介して子オブジェクトの子オブジェクトの配列にアイテムを追加する

分類Dev

配列オブジェクトをオブジェクトに追加します

分類Dev

オブジェクトの配列をPHPExcelテンプレートに追加します

分類Dev

オブジェクトの状態配列に新しいフィールドを追加します

分類Dev

オブジェクトを含む配列にいくつかのフィールドを追加します

分類Dev

Laravelコレクションオブジェクトアイテムに配列を追加する方法

分類Dev

ElasticSearch:オブジェクトフィールドの既存の配列にオブジェクトを追加します

分類Dev

配列を拡張するオブジェクトをJSコレクションに追加します(継承?)

分類Dev

オブジェクトプロパティの2つの配列を比較し、1つのオブジェクトにプロパティを追加します

分類Dev

アンダースコアを使用して、オブジェクトのプロパティを1つの配列にマージします

分類Dev

アクティブレコードは、オブジェクトではなく名前でグループに参加します

分類Dev

ConfigurationElementCollection内のオブジェクトのプロパティを配列にコピーしますか?

分類Dev

コントローラのアクティブレコードに計算列を追加します

分類Dev

AngularJSのオブジェクト配列にフィールドを追加する

分類Dev

ngForのリアクティブフォーム配列オブジェクトを反復処理します

分類Dev

mongodb:配列プロパティを1つのオブジェクトから別のオブジェクトにコピーします

分類Dev

同じ配列に追加する最後の配列オブジェクトをコピーします

分類Dev

オブジェクトの配列に関連付けられたレコードを取得します

分類Dev

javascriptを使用してHTMLテーブルにjson配列オブジェクトを追加します

分類Dev

jsonオブジェクトをjson配列に追加します

Related 関連記事

  1. 1

    Rubyはアクティブなレコードまたはオブジェクトの配列をハッシュの配列に変換します

  2. 2

    出力するアクティブレコードオブジェクトに仮想属性を追加します

  3. 3

    アクティブレコード配列からオブジェクトを削除する

  4. 4

    参照IDなしでアクティブレコードオブジェクトを保存する

  5. 5

    角度jsを使用して、プロパティのオブジェクトとオブジェクトの配列にオブジェクトを追加します

  6. 6

    Rails 4アクティブレコード。シリアル化された配列属性が別の配列に含まれているかどうかを確認して、オブジェクトを検索します

  7. 7

    NSMutable配列にオブジェクトを追加し、ディープコピーします

  8. 8

    forループと配列を使用してオブジェクトにプロパティを追加します

  9. 9

    オブジェクト配列jQueryのレコードを削除します

  10. 10

    レデューサーを介して子オブジェクトの子オブジェクトの配列にアイテムを追加する

  11. 11

    配列オブジェクトをオブジェクトに追加します

  12. 12

    オブジェクトの配列をPHPExcelテンプレートに追加します

  13. 13

    オブジェクトの状態配列に新しいフィールドを追加します

  14. 14

    オブジェクトを含む配列にいくつかのフィールドを追加します

  15. 15

    Laravelコレクションオブジェクトアイテムに配列を追加する方法

  16. 16

    ElasticSearch:オブジェクトフィールドの既存の配列にオブジェクトを追加します

  17. 17

    配列を拡張するオブジェクトをJSコレクションに追加します(継承?)

  18. 18

    オブジェクトプロパティの2つの配列を比較し、1つのオブジェクトにプロパティを追加します

  19. 19

    アンダースコアを使用して、オブジェクトのプロパティを1つの配列にマージします

  20. 20

    アクティブレコードは、オブジェクトではなく名前でグループに参加します

  21. 21

    ConfigurationElementCollection内のオブジェクトのプロパティを配列にコピーしますか?

  22. 22

    コントローラのアクティブレコードに計算列を追加します

  23. 23

    AngularJSのオブジェクト配列にフィールドを追加する

  24. 24

    ngForのリアクティブフォーム配列オブジェクトを反復処理します

  25. 25

    mongodb:配列プロパティを1つのオブジェクトから別のオブジェクトにコピーします

  26. 26

    同じ配列に追加する最後の配列オブジェクトをコピーします

  27. 27

    オブジェクトの配列に関連付けられたレコードを取得します

  28. 28

    javascriptを使用してHTMLテーブルにjson配列オブジェクトを追加します

  29. 29

    jsonオブジェクトをjson配列に追加します

ホットタグ

アーカイブ