Rails アプリで日付範囲フォームを作成しようとしているので、ユーザーは 2 つの日付を入力できます。これらの日付はクエリに投稿され、アプリケーションが接続されている API から結果が返されます。
私のモデルは次のようになります: 最初の日付と 2 番目の日付がデフォルトで先週の日付範囲を作成できるようにしますが、デフォルトを上書きするオプションを受け入れることになっています...
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オプションを好むでしょう-ユーザーは2つの日付を入力し、更新せずにメソッドに固執し、日付がリセットされるとデフォルトに戻ります。
助けてくれてありがとう!