【问题标题】:Rerouting=> http://localhost:3000/today_attendance?date=2019-03-29 TO http://localhost:3000/today_attendance重新路由=> http://localhost:3000/today_attendance?date=2019-03-29 到 http://localhost:3000/today_attendance
【发布时间】:2019-03-28 12:49:07
【问题描述】:
**Controller**
  def today_attendance
    @date = params[:date]?Date.parse(params[:date]): Date.today
    @attendances = Attendance.joins(:user).where(date: @date).select(:email, 
    :password, :date, :status)
  end

**Views** (Just changed from GET to POST method)
   <%= button_to '<', attendance_path(date: @date - 1.day) %>
   <%= "#{@date.strftime("%A")}, #{@date.strftime("%d")} #{@date.strftime("%B")} #{@date.year}" %>
   <%= button_to '>', attendance_path(date: @date + 1.day) %>

**Routes**
  resources :users do
  resources :attendances
  end
  get 'today_attendance', to: 'attendances#today_attendance', as: 'today_attendance'
  resource :calendar, only: [:today_attendance], controller: :attendances
  post 'today_attendance', to: 'attendances#today_attendance', as: 'attendance'

你好,我是新来的@Rails。

目前我有一个与日期相关联的每日出勤表。在我的页面上显示“下一天”和“前一天”按钮,将我的出勤率从今天带到其他日子。

我当前显示的网址是:http://localhost:3000/today_attendance
每当我点击按钮时,它都会让我例如http://localhost:3000/today_attendance?date=2019-03-29

问题:如何将此页面重定向回http://localhost:3000/today_attendance,以便导出到 .xls 的文件可以读取/打印出不同日的出勤情况?

【问题讨论】:

  • 所以无论用户点击Next Day还是Previous Day,您都希望保持相同的网址(localhost:3000/today_attendance)?
  • 是的,这是我的意图。
  • 那么你不应该使用GET请求,而应该使用POST或者做ajax请求。
  • 是否可以使用 POST 作为重定向而不是更新模型?我不希望在查看“第二天”和“前一天”出勤率时更新任何参数。
  • 当然,一切皆有可能。问题是 - 查询参数 (localhost:3000/today_attendance?date=2019-03-29) 有什么问题。它不应该破坏你的代码。此外,它还准确地告诉您访问此页面时可以期待什么。如果您将使用 POST 请求,则无法共享特定日期的出席链接(您必须提交表单)。

标签: ruby-on-rails routes export xls


【解决方案1】:

您能否在您的routes.rb 中添加您的路线的代码 sn-p,以及为按钮添加您的 html 代码?

根据我的第一个假设,我相信您的按钮可能正在执行 GET 而不是 POST(通过在 uri 中添加 ?date=2019-03-29 查询)。

另一个问题可能是您的按钮未指定为POST 方法。可能是您忘记指定&lt;button type="submit" &gt;。所以代码 sn-ps 可能有助于进一步缩小问题范围:)

【讨论】:

  • **上传了我的代码 sn-p,现在通过 POST 方法来重定向到 /today_attendance
  • 好吧,如果你想做的只是在发布后重定向......然后只需在控制器中添加一个重定向回/today_attendance。您可以在#today_attendance 的末尾添加redirect_to today_attendance_path .. 只是我理解正确,您想调用操作...查询给定日期的与会者.. 然后重定向回该页面接收另一个日期?
  • 或者正如 MrShemek 所说,您可以使用 .js.erb 文件执行 AJAX 请求并以这种方式重新呈现页面
  • 我希望 /today_attendace 保持原样,无论我查询到哪个日期。例如说我点击第二天获取第二天的与会者,页面将保留在当天(只是 URL 将保留为 /today_attendance 而不是 /today_attendance?date=2019-03-29。
  • 所以添加redirect_to today_attendance_path 你会丢失你的查询吗? .. 所以要么将查询作为参数传递给重定向redirect_to today_attendance_path(params[:date]),这似乎是一种迂回的方式.. 要么 Ajax 可能是一个更优雅的解决方案,并为您节省页面重新加载。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-14
  • 2016-03-18
  • 2019-07-07
  • 2016-08-06
  • 1970-01-01
  • 2010-10-07
  • 2016-07-21
相关资源
最近更新 更多