我正在尝试在我的rails应用程序中创建日期范围表单,因此用户可以输入两个日期,这些日期将发布到查询以返回应用程序连接到的API的结果。
我的模型如下所示:它允许第一个日期和第二个日期默认为创建上周的日期范围,但它应该接受覆盖默认值的选项......
class Day
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :first_day, :second_day
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def self.monday(options = {})
if options[:first_day]
return Date.parse(options[:first_day])
else
d = Date.today
seven_days_ago = (d - 7)
seven_days_ago.beginning_of_week
end
end
#defines the end of last week for the query
def self.sunday(options = {})
if options[:second_day]
return Date.parse(options[:second_day])
else
d = Date.today
seven_days_ago = (d - 7)
seven_days_ago.end_of_week
end
end
def persisted?
false
end
end
形式:
<%= form_for @day do |f| %>
<div class="field">
<%= f.label 'Beginning Date' %>
<%= f.datepicker :first_day, :size => 6 %>
<%= f.label 'End Date' %>
<%= f.datepicker :second_day, :size => 6 %>
</div>
<div class="actions">
<%= f.submit 'Submit' %>
</div>
<% end %>
和控制器:
def new
@day = Day.new
end
# POST /days
# POST /days.json
def create
@day = Day.new(params[:day])
if @day.valid?
redirect_to root_url
end
end
我目前正在访问生活在某些控制器中的查询中的Day.monday和Day.sunday方法。这些值总是最终成为默认值,即使用户通过表单发布其他日期(想法是覆盖默认值)。
我更喜欢一个javascript选项 - 用户输入两个日期,他们坚持使用方法而不刷新,然后当重置日期时,它会恢复为默认值。
感谢您的帮助!