2017-01-26 12 views
0

私はレールが初めてで、フロントエンドプロジェクトをレール環境に移動しました。 start_date、end_date、start_timeの各列を持つフォームを設定しました。 start_dateおよびend_dateには列の型があります。dateおよびstart_timeには列の型:timeがあります。私は日付選択ツールを使用して時刻を選択する日付と時刻の選択を選択しています。私は、日付と時刻の両方を受け付けておりますするフォーマットは以下のとおりです。私は、ユーザにとってより分かり日付と時刻の形式を表示する瞬間のJSを使用して出力をフォーマットしたRails - :dateと:timeカラムにはゼロ値が表示されます

Wed Jan 11 2017 13:31:14 GMT+0530 

moment().format('LL'); //January 23,2017 
moment().format('LTS'); //1:17:54 PM 

フォームを送信すると、日付と時刻の列はnilになります。

Date.parse()およびTime.parse()またはstrftimeを使用して日付を変換する必要があることを読んでいます。

私には2つの質問があります。 1.変換のコードはどこに置く必要がありますか?直観では、入力自体を取っている間に、コントローラ内にあるか、またはビュー内にあるべきだと思います。 2. [日付と時刻]列の形式は何ですか?

私はActiveRecordのデータベースとしてsqlite 3を持っていますが、私はRails 5.0.1を使用しています。

home.new.html.erb(3列タイプのためのフォームフィールド):

<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field :start_date,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="home_start_date" id="start-date-label">Enter start date</label> 
      </div> 


      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field :end_date,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="home_end_date" id="end-date-label">Enter end date</label> 
      </div> 

      <div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label"> 
      <%= f.text_field :start_time,:class => "mdl-textfield__input"%> 
      <label class="mdl-textfield__label" for="home_start_time" id="start-time-label">Enter time</label> 
      </div> 

home_controller.rb githubのに

class HomeController < ApplicationController 
    def index 
    @campaigns = Home.all 
    end 

    def new 
    @home = Home.new 
    end 

    def show 
    @campaign = Home.find(params[:id]) 
    end 

    def create 
    home_params = params.require(:home).permit(:campaign_name,:phone_number_receiver,:start_date,:end_date,:start_time,:sms_msg) 
    @home = Home.new(home_params) 
    @home.save 
    end 
end 

リンク:あなたが処理しなければならないhttps://github.com/rimildeyjsr/sms-scheduler

答えて

2

コントローラ内のデータ - または実行するデータ処理が大量にある場合、または処理ルールが複雑な場合:コントローラに処理を専用のデータ処理に渡させるオブジェクト。

私はこのようなあなたのコントローラのコードを変更することをお勧めしたい:

def create 
    @home = Home.create(home_params) 
end 

private 

def home_params 
    home_params = params.require(:home).permit(
    :campaign_name, :phone_number_receiver, :start_date, :end_date,  
    :start_time, :sms_msg 
).tap do |attr| 
    attr[:start_date] = Date.parse(attr[:start_date]) 
    attr[:end_date] = Date.parse(attr[:end_date]) 
    attr[:start_time] = Time.parse(attr[:start_time]) 
    end 
end 

tapは、それがrequireを介して処理され、それはコンテンツだ修正されているとして、あなたがparamsハッシュにステップすることができます。処理が複雑になった場合

、あなたのような何かができる:ParamsProcessorはあなたが処理を処理するために作成したオブジェクトである

def home_params 
    home_params = params.require(:home).permit(
    :campaign_name, :phone_number_receiver, :start_date, :end_date,  
    :start_time, :sms_msg 
).tap do |attr| 
    ParamsProcessor.modify attr 
    end 
end 

。例:

module ParamsProcessor 
    def self.modify(hash) 
    hash.each do |key, value| 
     hash[key] = Date.parse(value) if /_date$/ =~ key && value.present? 
     hash[key] = Time.parse(value) if /_time$/ =~ key && value.present? 
    end 
    end 
end 
+0

私はレールを初めて使っていますが、より詳細な説明を教えてください。 –

+0

コントローラコードを投稿した場合、そのコードをどのように修正するべきかを提案できます。 – ReggieB

+0

コントローラコード –

関連する問題