0

何かのために日付と時刻を選択する必要があります。私は を使用しており、と宝石を使用simple_formした twitter ブートストラップを使用しています。datepickertimepicker

まず、フォーム ジェネレーターを十分にカスタマイズして、すべてを機能させることができませんでした。

<div class="control-group string optional">
          <label class="string optional control-label" for="publish_day">Publish Date</label>
          <div class="controls">
            <div class="input-append date" id="publish_date" data-date="<%= @press_release.published_day %>" data-date-format="dd-mm-yyyy">
              <input class="span2" type="text" name="press_release[publish_day]" value="<%= @press_release.published_day %>" readonly>
              <span class="add-on"><i class="icon-calendar"></i></span>
            </div>
          </div>
        </div>

       <div class="control-group string optional">
          <label class="string optional control-label" for="publish_time">Publish Time</label>
          <div class="controls">  
            <div class="input-append bootstrap-timepicker-component date">
              <input class="span2" id="publish_time" name="press_release[publish_time]" type="text" readonly>
              <span class="add-on"><i class="icon-time"></i></span>
            </div>
          </div>
        </div>

これは不自由で、おそらく「正しい」わけではありませんが、simple_form をカスタマイズしてそれを実現するのに十分な方法がわかりません。

次に、フィールドを結合してデータベースに追加するには、コントローラーで次のことを行います。

params[:press_release][:publish_date] = Time.parse("#{params[:press_release][:publish_day]} #{params[:press_release][:publish_time]}")

これは本当にハックなようですが、別の方法がわかりません。2 つのフォーム フィールドからデータを取得し、それを組み合わせてフォーマットするより良い方法は何ですか? 私はそれがbefore_saveで何かだと推測していますが、paramsそのように呼び出されたメソッドに渡す方法がわかりません。

任意の提案をいただければ幸いです。前もって感謝します!

4

3 に答える 3

1

できる改善の 1 つは、解析/書式設定をPressReleaseモデルに移動することです。

attr_accessor :publish_day, :publish_time

before_validate do
  self.publish_date = Time.parse([self.publish_day, self.publish_time].join(" ")) if self.publish_day.present?
end

このようにして、params値の再割り当てをコントローラーから除外します(そのとおりです。「ハッキー」に見えます)。

于 2012-12-11T01:54:40.733 に答える
0

私の答えは、あなたのビューに戻って、「レールフィールド」で動作するようにすることです. コントローラーと 2 つのフィールドを連結することについては心配しません。実際、そのアプローチはかなり良い解決策だと思います。

だから私はフォームを見て、日付と時刻のフィールド「railsy」を取得しようとします

フィールドに日付ピッカーもある私のアプリの1つからの私のフィールドは次のとおりです。

   = f.text_field :content_date, id: 'datepicker', size: 10

このアプローチでエラーが発生した場合は、発生している特定のエラーとコード自体を投稿してください。

于 2012-12-11T02:01:43.437 に答える