我正在尝试向数据库发出查询,以便每次用户在jquery ui datepicker中更改月份时获取该月的可用日期。当他们选择当天时,它会向DB查询当天可用的小时数。
我应该这样做吗?我应该每年更换一次吗?这会是太多的记录吗? (我觉得如果我要发送一年中哪些时间可用,我会觉得。)
如何正确执行此操作?当我进行Ajax调用时,我得到“找不到模板。”
def new
if signed_in?
@task = Task.new
get_dates
else
redirect_to root_path
end
end
def get_dates(day=nil)
if !day
day = DateTime.now
end
day = day.utc.midnight
minus_one_month = (day - 1.month).to_time.to_i
plus_one_month = (day + 1.month).to_time.to_i
full_days_results = AvailableDates.all.select(['unix_day, count(*) as hour_count']).group('unix_day').having('hour_count > 23').where(unix_day: (minus_one_month..plus_one_month))
full_days_arr = full_days_results.flatten
full_unix_array = []
full_days_arr.each do |full_day|
tmp_date = Time.at(full_day.unix_day).strftime('%m-%d-%Y')
full_unix_array.append(tmp_date)
end
gon.full_days = full_unix_array
return
end
full_days = gon.full_days if gon
$ ->
$('.datepicker').datepicker(
dateFormat: 'mm-dd-yy'
beforeShowDay: available
onChangeMonthYear: (year, month, inst) ->
target = "#{month}-01-#{year}"
jqxhr = $.get("/getdates",
day: target
)
console.log(jqxhr)
$(this).val target
return
<%= f.label :end_time %>
<%= f.text_field :end_time, :class => 'datepicker' %>
...
match '/getdates',to: 'tasks#get_dates', via: 'get'
Template is missing
Missing template tasks/get_dates, application/get_dates with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "c:/dev/rails_projects/onager-web-app/app/views"
答案 0 :(得分:1)
嗯,你需要做的几件事情:
1 - 将get_dates设为私有(并选择更像红宝石的名称)
private
def hours_for(day=nil)
...
end
Rails认为get_dates是一个控制器动作,当它真的没有时。这就是为什么它找不到get_dates动作的相应视图的原因(当它不是动作时,它是一个辅助方法,也许你应该考虑把它放在一个模型中)
2 - hour_for方法应该返回一些东西。现在不是。我不知道这行是做什么的:
gon.full_days = full_unix_array
我的意思是,gon是什么?只需直接返回数组即可。你不应该在get方法中设置东西。另外,请查看this以了解如何在rails页面中呈现json。
3 - 将您的 tasks.rb 重命名为rails项目的controllers文件夹中的 tasks_controller.rb 。
4 - 将routes.rb文件修复为:
get '/getdates/:day', to: 'tasks#load_dates', as: 'getdates'
此外,必须在 load_dates 调用 hours_for 。任务中的“新”操作应该呈现模板,每次用户更新日期时,您的coffeescript都应该调用load_dates ajax方法。
现在,您需要了解如何更新new.html.erb页面。