2017-03-04 41 views
0

Rails新手在這裏,請原諒我,如果我失去了明顯的東西。從表格中保存日期和時間

我有一個名爲Game的模型,它的表格中有datetime列,名稱爲occurred_at。正如您可能猜到的那樣,信息旨在存儲game發生的日期/時間。到目前爲止,在創建我的game對象時,我通過調用Time.parse(str)來使用seeds.rb來填充occurred_at屬性。 (例如Time.parse("1 February 2017 5:00 PM PST")

現在我正在爲games#newgames#edit頁面工作_form。這是(非常基本)想什麼,我的_form的樣子:

<%= form_for @game do |f| %> 
    <%= f.date_field :date %> 
    <%= f.time_field :time %> 
    <%= f.text_field :home_team %> 
    <%= f.text_field :away_team %> 
<% end %> 

很顯然,這是不行的。 @game沒有datetime方法。 @game的日期和時間通過@game.occurred_at訪問。直觀的解決方案是在我的參數中傳遞datetime,然後在我的GamesController中添加邏輯以相應地創建/更新@game.occurred_at

所以我有三個疑問:

  1. 我是否有正確的想法,經過datetime參數並將它們組合在GamesController的根本解決方案呢?如果不是,完成:occurred_at更新目標的最佳方法是什麼?
  2. 如果我對底層解決方案的想法是正確的,我將如何在我的應用程序中執行該解決方案?
  3. 通常,當創建或更新對象時,將params直接傳遞給負責創建或更新對象的方法。這是否會影響我的問題?

回答

2

您有多種選擇可以做到這一點。

1 /你的回答可以工作,但需要聲明:日期:時間爲屬性訪問器,它的工作,並在你的控制器傳遞的參數合併到添加的邏輯:occured_at

2 /你可以使用rails datetime_select http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-datetime_select

3 /比較複雜的是創建datetime對象的所有表單輸入,但我不確定這是最好的解決方案。

編輯: 你的答案工作,你需要編輯你的模型像這樣

class Game < ActiveRecord::Base 
    attr_accessor :date, :time 

    ... rest of your code 
end 

然後在你的控制器的方法:

game = params[:game] 
date = game[:date] 
time = game[:time] 
occured_at = Time.parse "#{date} #{time}" 
@game = Game.new(game) 
@game.occured_at = occured_at 
@game.save! 

有更快的實現代碼,但我故意把每一行爲你理解發生了什麼。

+0

@Jay,你可以試試這個答案嗎?我希望它對你有用。如果是的話,你能否將答案標記爲已接受? – Jeremie

相關問題