gpt4 book ai didi

javascript - Ajax 调用 Rails 返回缺少模板

转载 作者:行者123 更新时间:2023-12-03 12:21:20 26 4
gpt4 key购买 nike

每次用户在 jquery ui 日期选择器中更改月份时,我都会尝试对数据库进行查询以获取该月的可用日期。当他们选择这一天时,它将再次向数据库查询当天的可用时间。

  1. 我应该这样做吗?我应该把它改为每年一次吗?会不会记录太多了? (我觉得如果我发送一年中哪几天的可用时间就可以了)。

  2. 如何正确执行此操作?当我进行 Ajax 调用时,我收到“找不到模板”。

相关代码:

tasks_controller.rb

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

tasks.js.coffee

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

任务\new.html.erb

<%= f.label :end_time %>
<%= f.text_field :end_time, :class => 'datepicker' %>

路线.rb

...
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"

最佳答案

那么,您需要做几件事:

1 - 将 get_dates 设置为私有(private)(并选择一个更像 ruby​​ 的名称)

private

def hours_for(day=nil)
...
end

Rails 认为 get_dates 是一个 Controller 操作,但实际上不是。这就是为什么它找不到 get_dates 操作的相应 View (当它不是操作时,它是一个辅助方法,也许您应该考虑将其放入模型中)

2 - hour_for 方法应该返回一些东西。现在还不是。我不知道这一行是做什么的:

gon.full_days = full_unix_array

我的意思是,gon 是什么?直接返回数组就可以了。您不应该在 get 方法中设置内容。另外,看看this了解如何在 Rails 页面中渲染 json。

3 - 在 Rails 项目的 Controller 文件夹中将 tasks.rb 重命名为 tasks_controller.rb

4 - 将routes.rb 文件修复为:

get '/getdates/:day', to: 'tasks#load_dates', as: 'getdates'

此外,必须在 load_dates 调用 hours_for。任务中的"new"操作应该呈现一个模板,并且每次用户更新日期时,您的 CoffeeScript 都应该调用 load_dates ajax 方法。

现在,您需要做的是了解如何更新 new.html.erb 页面。

关于javascript - Ajax 调用 Rails 返回缺少模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24434351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com