ビューに次のJavaScriptがあります。
<script type="text/javascript">
var pusher = new Pusher('<%= Pusher.key %>'); // Replace with your app key
var channel = pusher.subscribe('choices');
channel.bind('created', function(data) {
var after = $('.ticket:last').attr('data-time');
$("#tickets").append("<%=raw escape_javascript(render(@tickets, :after => " + after + ")) %>");
});
</script>
そして、私のコントローラーでは次のようになります。
@tickets = Choice.where("choices.created_at > ?", Time.at(params[:after].to_i + 1).utc)
JavaScriptからコントローラーにafterparamを渡す方法を探しています。これは、created_atが現在表示されている最後のChoiceよりも高いChoiceのみを返します。
私はこの行が仕事をしていないと思うので、これに関する少しの助けは非常に応用されるでしょう:)
$("#tickets").append("<%=raw escape_javascript(render(@tickets, :after => " + after + ")) %>");
編集:
これで、 after変数のコントローラーへの受け渡しが修正されたようです。Firebugをチェックしたところ、応答に最新のBETのデータが含まれていることがわかりました。しかし、ビューはまだ間違っています。最新のベットをDIVに追加する代わりに、過去のすべてのベットを2回表示し、新しいベットはまったく表示しません。誰?:)
ファイルを閲覧する:
<script type="text/javascript">
var pusher = new Pusher('<%= Pusher.key %>'); // Replace with your app key
var channel = pusher.subscribe('choices');
channel.bind('created', function(data) {
var after = $('.ticket:last').attr('data-time');
var settings = { after: after}
$.ajax({
url: '/Home/Index',
type: 'POST',
dataType: 'json',
data: settings,
cache: true,
success: function (data) {
$("#tickets").append("<%=raw escape_javascript(render(@tickets)) %>");
}
});
}
);
</script>
ルート:
post 'Home/Index' => 'home#index'
コントローラ(インデックスアクション):
@tickets = Choice.betable(current_user).where("choices.created_at > ?", Time.at(params[:after].to_i + 1).utc)
respond_to do |format|
format.json { render :json => @tickets }
format.html
end
解決:
多くの試行錯誤の末、私は解決策を使用することになりました。そこでは、ビューのjavescriptコードではなく、コントローラーでHTMLをレンダリングします。このようにして、必要なパラメータにアクセスできます。
respond_to do |format|
format.html
format.json do
@html = render_to_string( :partial => '/choices/choice.html.erb', :locals => { :choice => @tickets} )
render :json => { :success => true, :html => @html }
end
end
延長された助けをくれたChazt3nに感謝します:)本当にそれをappriciated..