2017-09-01 15 views
1

APIコールからすべてのマーケットデータを更新しようとしています。Railsで関連付けられたオブジェクトをメソッドで更新する

私は多くのマーケットを含むプラットフォームを持っています。市場には高値、低価格、最新価格などがあります。

関連するコレクションを反復処理して更新する方法を呼び出すことはできません。たぶん私は構造全体が正しくないかもしれませんが、わかりません。

私はmarket.updateメソッドを使用してAPI呼び出しでデータを更新するのが理にかなっていると思っていました。私はプラットフォームコントローラ内のすべての組み合わせを試してみた

<% @platform.markets.each do |market| %> 
     <%= market.market_name %> 
     <%= market.high %> 
     <%= market.low %> 
     <%= link_to 'Update', [market.platform, market], 
       :method => :put %> 
    <% end %> 

プラットフォームビューで正常に動作しますが、私は、私は可能プラットフォームのすべての市場を更新するには、この操作を行うべきか見当がつかない

class MarketsController < ApplicationController 
    def update 
    @platform = Platform.find(params[:platform_id]) 
    @market = @platform.markets.find(params[:id]) 
    @market.api_get_market_summary 
    @market.save 
    redirect_to @market.platform 
    end 

class PlatformsController < ApplicationController 
    def update 
    @platform = Platform.find(params[:id]) 
    @platform.markets.each do |market| 
     market.update(:id => market.id) # this obviously doesn't work 
    end 
    redirect_to @platform 
    end 

ここですべての属性をupdate_attributes関数で更新する必要がありますか?

オブジェクトが作成されたときにマーケットAPIの更新を呼び出して、そこでデータが初期化されるようにします。

どうすればよいですか?

もう1つのプラットフォームを追加した場合、このAPIが使用するさまざまなAPIリクエストをどのように処理できますか?あなたは市場のコレクションに対してアクションを実行したい場合は

答えて

0

にこれを追加することができますか?

class Platform < ApplicationRecord 
    has_many :markets 
    after_save :update_markets 

    ... 

    private 

    def update_markets 
    markets.each do |market| 
     ... 
    end 
    end 
end 

ていることに注意してください:

after_saveの両方が作成および更新が、より具体的なコールバックがafter_create常に後とafter_update上で動作し、どんなにマクロ呼び出しが実行された順序。私は別のプラットフォームを追加した場合

私はあなたがここにmarket.update(:id => market.id)をやろうとしているかわからないが、あなたはすべての市場に1つのレコードだけを更新している場合は、update_allhere's a good source

別の部分を検討し、このAPIが使用するさまざまなAPIリクエストをどのように処理すればよいでしょうか?要求はあなたのコントローラに当たったときに、新しいPlatformオブジェクトは、別のIDを使用して作成し、保存されている別のプラットフォームを追加することにより

@market = @platform.markets.find(params[:id])

また、代わりに上記の@market = Market.find(params[:id])を考えます。

+0

コールバックは問題ありません。ありがとう。私はプラットフォームコントローラの更新メソッドを使用して、各市場をループし、API呼び出しを含むコールバック関数をトリガーする属性を変更しました。 –

-1

あなたがPlatformモデルにcallbackを追加することを検討している、次の関係Platform --- has_many --- Marketを持つあなたのプラットフォームモデル

accepts_nested_attributes_for :markets 
関連する問題