Я использую ajax, чтобы получить выбранную пользователем дату с datepicker, затем передать их контроллеру для вычисления результата, а затем передать результат обратно для просмотра.Параметр Rails от контроллера не отображается в поле зрения
В моей модели у меня есть:
def mobile_type_count(name,name1,field,
filed1,value, start_time, end_time)
........
end
Контроллер analyzer_controller.rb
def data
start_time = params[:start_date]?
Date.parse(params[:start_date]) :Date.iso8601
end_time = params[:end_date]?
Date.parse(params[:end_date]) :Date.iso8601
@iphone =Analyzer.new.
mobile_type_count('deviceOS','mobileNum','$deviceOS',
'$mobileNum','iOS' , start_time , end_time )
@android = Analyzer.new.
mobile_type_count('deviceOS','mobileNum','$deviceOS',
'$mobileNum','Android' , start_time, end_time)
end
Посмотреть data.html.erb
<div class="input-daterange input-group" id="datepicker">
<input type="text" class="input-sm form-control" name="start" value="2016-04-11" id="startDate" />
<span class="input-group-addon">to</span>
<input type="text" class="input-sm form-control" name="end" value="2016-04-13" id="endDate" />
</div>
<%= button_tag(type: 'submit', class: "btn btn-default btn-sm", :id => 'get_data') do %>
Submit
<% end %>
</div>
<div class="ibox-content">
<%= pie_chart({"iphone" => @iphone, "android" => @android}) %>
</div>
Ajax
<script type="text/javascript">
$(document).ready(function() {
$('#get_data').click(function(){
var sd = $('#startDate').val(),
ed = $('#endDate').val()
$.ajax({
url: "/analyzer/data",
type: "post",
data: {'start_date' :sd, 'end_date': ed},
success: function(){
},
error:function(){
alert('Error');
}
});
});
при выборе диапазона дат и нажмите кнопку отправки, я ничего не получаю, но когда я использовалputs
, чтобы проверить, если выбранная дата была передана в контроллер
<%= puts pie_chart({"iphone" => @iphone, "android" => @android}) %>
Я могу получить результат, напечатанный на Терминале,
<script type="text/javascript">
new Chartkick.PieChart("chart-1", {"iphone":[11],"android":[10]}, {});
@iphone = [11] @android = [10], который является правильным,
, когда я удалить puts
, а затем проверить результат в браузере, @iphone и @android пустые arraies:
<script type="text/javascript">
new Chartkick.PieChart("chart-1", {"iphone":[],"android":[]}, {});
</script>
не уверен, что произошло, надеюсь, что кто-то может мне объяснить немного. Спасибо
ОБНОВЛЕНО
здесь the mobile_type_count
метод, но я уверен, что этот метод хорошо, иначе <%= puts pie_chart({"iphone" => @iphone, "android" => @android}) %>
не возвратит никакого результата. Причина, почему я использую puts
только для тестирования, я думаю, что проблема является результатом (@iphone, @andriod) не получил вынесенный в представлении
def mobile_type_count(name,name1,field, filed1,value, start_time, end_time)
date_match = {:$match => {:created_at => { :$gt => start_time , :$lt => end_time }}}
match = { :$match => {name => value}}
group ={:$group =>{ :_id =>
{name => field,
name1 => filed1},
:count => {:$sum =>1}
}}
group1 = {:$group =>{:_id =>
{ name => field,
name1 => filed1},
#:totalCount=> { :$sum => '$count' },
:distinctcount => {:$sum => 1}
}}
mobile_usr= collection.aggregate([date_match,match,group,group1])
mobile_usr.map do |m|
m[:distinctcount]
end
end
Похоже, 'mobile_type_count' возвращает пустой массив. Можете ли вы включить пример кода для метода 'mobile_type_count'? –