1

処方モデルを使用したRails3アプリケーションがあります。モデルにはいくつかのフィールドがあり、そのうちの2つは、処方箋の期間を計算して表示するためのものです。

現時点では、ユーザーは「3か月」などのテキストフィールドに値を入力し、日時の入力を今から3か月に手動で変更します。これは、ユーザーにとって自動化するのに最適な形式のようです。

現在、フィールドは次のようになっています。

治療期間

<%= f.text_field :duration, :class => "input-text" %>

有効期限

<%= f.datetime_select :expiry, :order => [:day, :month, :year], :class => "input-text" %>

だから、私の質問。次のような期間フィールド用に2つのドロップダウンリストを作成するにはどうすればよいですか。

[1] [Day]

ユーザーは最初のリストから番号を選択でき、2番目のリストでは日、週、または月を選択できます。

期間選択ボックスを使用して選択した値は、「1か月」などのテキスト文字列として保存され、1か月のTime.nowの値は、有効期限列に日時値として保存されます。

このようなことは可能ですか?もしそうなら、どのように?

4

3 に答える 3

3

この目的に合わせて作られたように見えるので、慢性的な宝石をどのように使用するかの例を示します。

require 'chronic'
duration = "3 months" # => "3 months" 
Time.now # => 2012-07-09 18:43:50 -0700 
Chronic.parse(duration + " from now") # => 2012-10-09 18:43:55 -0700 

私があなたのユースケースを正しく理解していれば、日時選択を完全に取り除くことができます。ユーザーにテキストの長さを尋ね、それをテキスト属性に割り当てます。次に、chronicを使用して、テキストパラメータから時間値を決定し、それをdatetime属性に割り当てます。追加のクレジットについては、解析された時間の値を非同期で取得し、フォームを送信する前にページに表示して、送信する内容に意味があることを確認できるようにします。

于 2012-07-10T01:51:45.463 に答える
1

次のような簡単なことを行うことができます。

Time.now + 10.days

出典:Railsで現在の時刻に10日を追加する方法

そして、ドロップダウンを行う方法は?

Railsのドロップダウンボックス

オブジェクトの作成時に処方が有効であると仮定すると、開始日を現在の時刻Time.now(日時に変換する場合があります)としてデータベースに保存し、ドロップダウンに基づいて、それが私の頭のてっぺんからのように期限切れになるまでの時間:

eval "Time.now + #{params[:prescription][:amount].#{params[:prescription][:time_type]}"

それが理にかなっていることを願っています。おそらくevalを使用していませんが、時間を追加するためのより良い方法を探します。タイムリファレンスは次のとおりです:http://api.rubyonrails.org/classes/Time.html

于 2012-07-09T20:04:20.123 に答える
0

まず、期間フィールドを1〜30、または任意の数値の選択メニューに変更します。

次に、フォームを処理するコントローラーアクションで:

@prescription = Prescription.new(params[:prescrption])
@prescription.duration = "#{pluralize(params[:prescription][:duration], params[:prescription][:expiry])}"
if params[:prescription][:expiry] == "Day"
    @prescription.expiry = Time.now + params[:prescription][:duration].days
elsif params[:prescription][:expiry] == "Week"
    # Put week logic here
elsif params[:prescription][:expiry] == "Month"
    # Put month logic here
end

# Put the rest of the @prescription.save stuff here.

少し冗長ですが、Rubyでの時間設定の仕方と同じようなものだと思います...

于 2012-07-02T04:35:08.803 に答える