jquery - time_select() 帮助器 + jQuery UI 日期选择器

标签 jquery ruby-on-rails

我有一个带有 time_select 和 jquery datepicker 的表单,

我希望能够在提交表单时将 time_Select 和日期选择器的值合并到 ActiveRecord 模型的一个日期时间中...

有没有一种优雅的方法可以做到这一点? 我应该在客户端还是服务器端进行...我想让我的操作就这么简单:

  def create
    @drive = Drive.new(params[:drive]))
    if @drive.save
      flash[:notice] = 'Drive created !'
      render :action => :show 
    else
      render :action => :new
    end
  end

我不知道...我应该在模型中使用虚拟属性并在提交表单时在 before_save 或在 javascript 中合并它们,或者也许您有更好的主意...您觉得怎么样?

谢谢

迈克。

最佳答案

简短的回答是:没关系,它们都同样好。

您有 3 个合理的地方可以处理这个问题。

  1. 在客户端中提交时使用 JavaScript。
  2. 在 Controller 中。
  3. 在模型中。

无论您使用什么方法,您都必须在 Controller /模型中处理数据,因为所有参数都以字符串形式接收。

在模型和 Controller 变体中,您需要做出额外的决定。将 DateTime 从 6 个字段拼凑在一起或使用一对字符串(一个包含值,一个包含 strptime 格式。)

知道DateTime的构造函数方法从一组单独的字段构建日期时间对象所需的工作量与从日期时间字符串和格式字符串构建对象所需的工作量大致相同。如何构建 DateTime 对象并不重要。

所以这一切都归结为个人喜好问题。

我个人认为这个逻辑属于模型。我不会把它放在 JavaScript 中,因为我想确保如果 JavaScript 被禁用,我的代码不会中断。 Controller 同样适合。但我觉得将这种逻辑转移到模型可以更稳健地处理日期和验证。我还发现 strptime 构造函数比 7 个参数的民用构造函数更容易阅读。但土木构造函数不需要我确保格式小时/分钟/秒的长度恰好是 2 位数字。无论哪种方式,我都会将年、月、日、小时、分钟和秒偏移量作为单独的 attr_accessors 字段传递,以便在必要时可以处理这些数据。

示例代码

class Drive < ActiveRecord::Base
  ...
  attr_accessor :year, :month, :day, :hour, :minute, :second, :locale_offset

  before_validation :build_date
  validates :future_time

  def build_date
    begin 
      self.date  = DateTime.civil( year.to_, month.to_i, day.to_i,
                     hour.to_i, minute.to_i, second.to_i, user.locale_offset)
    rescue 
      errors.add(:date, "Invalid date")
      return false
    end  
  end

  def future_time
    unless date > DateTime.now 
      errors.add(:date, "Date occurs in the past.")
    end
  end
end

关于jquery - time_select() 帮助器 + jQuery UI 日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1740420/

相关文章:

javascript - 页面加载时检查按下的鼠标按钮

ruby-on-rails - Ruby on Rails 中的全栈测试选项

ruby-on-rails - RubyMine 7远程调试没有这样的文件或目录错误

ruby-on-rails - 使用RVM安装Ruby 1.9.2时出现Curl证书错误

ruby-on-rails - Ruby on Rails : setting future "publishing" dates for blog postings

javascript - 使用 Jquery .each 获取 rel 属性

jquery - Mac 上的 Fancybox + Firefox

javascript - 有条件地加载具有屏幕宽度的js文件

javascript - 随机显示配对元素

ruby-on-rails - 如何在 erb 中使用带有枚举的 block