如何将一些输入合并为一个

时间:2014-07-29 11:25:07

标签: ruby ruby-on-rails-4 erb

我想知道如何将一些输入合并到数据库参数DATETIME中:

我希望用户选择dropdown-list中的日期以及时间中的日期。

这样的事情:
enter image description here

但我不知道如何将这些输入合并到我在模型中设置的DATETIME参数:

# encoding: UTF-8
class Schedule < ActiveRecord::Base
  belongs_to :user

  validates :user_id, presence: {message: "..."}
  validates :titel, presence: {message: "..."}
  validates :location, presence: {message: "..."}
  #validates :time, presence: {message: "..."}
  #validates :date, presence: {message: "..."}
  validates :date_time, presence: {message: "..."}

end

我希望你理解我的问题 谢谢你的帮助。
如果您需要更多信息,请告诉我们。

<小时/> 的 编辑:
这是我的控制器方法。我理解你了吗?

def add_now
    @schedule = Schedule.new(schedule_params)
    @schedule.date_time = DateTime.parse("#{params[:year]}-#{params[:month]}-#{params[:day]}")
    if @schedule.valid?
      @schedule.save
      #UserMailer.welcome_email(@user).deliver #BestätigungsEmail versenden
      flash[:notice] = 'Ein neuer Termin wurde erstellt.'
      redirect_to :root
    else
      render :action => "add"
    end
  end

这是我的观点 - 呃:

<p>
  <strong>Date_Time:</strong><br/>
  Tag: <%= schedule_form_builder.select :date_time, [['01','01'],['02','02'],['03','03']] %>
  Monat: <%= schedule_form_builder.select :date_time, [['01','01'],['02','02'],['03','03']] %>
  Jahr: <%= schedule_form_builder.select :date_time, [['2013','2013'],['2014','2014'],['2015','2015']] %>
  <%= schedule_form_builder.text_field :date_time, :class => 'form-control', :placeholder => 'Passwort erstellen' %>
  <%= show_field_error(@schedule, :date_time) %>
</p>

没有日,月或年,所以我没有正确理解你 如果你能再次帮助我会很好。

2 个答案:

答案 0 :(得分:1)

Rails有一个特定的表单助手来执行此操作。您应该将视图更改为:

<%= schedule_form_builder.datetime_select(:date_time) %>

它将通过params:

{
  "date_time(1i)"=>"2015", # year
  "date_time(2i)"=>"7",    # month
  "date_time(3i)"=>"29",   # day
  "date_time(4i)"=>"11",   # hour
  "date_time(5i)"=>"52"    # minute
}

ActiveRecord会自动理解这种格式。没有必要手动弄乱这个参数。因此,您可以像往常一样构建实例,例如Schedule.new(schedule_params)

最佳!

答案 1 :(得分:0)

您可以将这三个参数合并为一个字符串,并使用DateTime::parse方法将字符串转换为DateTime:

schedule.date_time = DateTime.parse("#{params[:year]}-#{params[:month]}-#{params[:day]}")

或者只是从数字中初始化DateTime对象:

schedule.date_time = DateTime.new(params[:year].to_i, params[:month].to_i, params[:day].to_i)