index.html.erbファイル(製品用)を更新する必要がありますが、ページ全体をリロードしません。たとえば、「Sold」という名前の列があり、値は「YES」または「NO」です。そして、これらの値を更新するバックグラウンドrakeタスクがありますが、インデックスファイルを更新して、どの製品が販売されているかをユーザーに表示するようにしたいのです。rakeタスクからそのような変更を呼び出す方法がわかりません。何か助けてください?私が見たajaxとrails3の「チュートリアル」のほとんどは、サーバーからユーザーへの対話ではなく、ユーザーからサーバーへの対話を主に扱っています。
質問する
114 次
2 に答える
0
製品のインデックス ページに JavaScript コードを追加して、サーバーに ping を送信し、定期的に (n 秒ごとに) 製品のステータスを取得することをお勧めします。ページに多くの製品がある場合、これは高価な呼び出しになる可能性があります。だから私はあなたにこのようなものを持っているでしょうindex.html.erb
<script type="text/javascript">
$('document').ready(function() {
$.ajax({
method: 'get',
url : 'products/ping',
dataType : 'json',
success: function (json) {
// iterate through json objects and update their respective sold status
// on page.
}
});
</script>
次に、ビューで更新する製品のステータスと ID を含む JSON オブジェクトで基本的に応答する製品コントローラに ping ルートを追加します。したがって、Ajax 要求が完了して JSON オブジェクトを取得したら、製品を繰り返し処理し、ID に基づいてその製品のステータスを更新します。したがって、製品コントローラーでのアクションは次のようになります。
# app/controllers/products_controller.rb
def ping
respond_to do |format|
products_sold_statuses = {}
format.json do
Products.all.each do |product|
# add product sold status and probably id to products_sold_statuses
end
render :json => product_sold_statuses, :layout => false
end
end
end
そのコードはテストされていないため、ソリューションを構築する際のベースとして使用してください。また、JQuery を使用していることも前提としています。
于 2012-08-28T12:15:57.090 に答える