0

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つの日付を入力し、更新せずにメソッドに固執し、日付がリセットされるとデフォルトに戻ります。

助けてくれてありがとう!

4

0 に答える 0