使用日历表单设置日期

时间:2013-08-14 12:15:25

标签: ruby-on-rails ruby date

我在这里使用CalendarHelper http://railscasts.com/episodes/213-calendars-revised

显示当前月份,如下所示:

class XyController < ApplicationController
@date ||= Date.today

我想在视图中使用表单,因此我可以将此日期设置为任何自定义日期。 像这样:

  = simple_form_for(@date) do |f|
    = f.input ???

我想我可能错过了如何为实例对象设置表单的要点。 我如何实现一个表单来设置我在控制器中设置的实例变量的日期?

编辑:

calendar_helper.rb

module CalendarHelper
  def calendar(date = Date.today, &block)
    Calendar.new(self, date, block).table
  end

  class Calendar < Struct.new(:view, :date, :callback)
    HEADER = %w[Hétfő Kedd Szerda Csütörtök Péntek Szombat Vasárnap]
    START_DAY = :monday

    delegate :content_tag, to: :view

    def table
      content_tag :table, class: "calendar" do
        header + week_rows
      end
    end

    def header
      ...
    end

    def week_rows
      ...
    end

    def day_cell(day)
      ...
    end

    def day_classes(day)
      ...
    end

    def weeks
      ...
    end
  end
end

在视图中:

  = calendar do |date|
     = date.day

所以在帮助器中有date = Date.today,我想将其更改为@date实例,并希望在简单的show视图中设置它,例如:

profiles_controller.rb

def show
  @date ||= Date.today
end

在视图中:

form_for(@date)do | f |     f.date_select:date

这样的东西,但这显然不起作用也不正确

5 个答案:

答案 0 :(得分:1)

我怀疑类似的东西会起作用

#view
= simple_form_for(@date) do |f|
  = f.input :date

答案 1 :(得分:1)

您不必使用此功能的表单,您可以使用Javascript:

# view
<%= select_date(@date, {}, onchange: 'reload_with_date($(this))') %>

<%= javascript_tag do %>
  # this function will get the date selected
  # and reload the page with the params[:date]
  window.reload_with_date = function(select_tag) {
    var date = Date.parse( $(select_tag).val() ); # get the selected date
    var current_url = window.location.href; # get the current URL
    if(current_url.indexOf('?') > -1) { # if already GET params in URL
      window.location.href = current_url += '&date=' + date.toString();
    } else { 
      window.location.href = current_url += '?date=' + date.toString();
    }
  }
<% end %>

# controller
def calendar
  @date = params[:date] || Date.today
  # will set @date to Date.today if params[:date].nil?

有关select_date的文档:

如果需要,请不要犹豫,问这个问题。希望这有帮助!

答案 2 :(得分:0)

<%= f.date_select(:dob,:start_year => 1950) %>

这对你有用。这就是我在.html.erb中写的你可以用自己的方式写的。但这就是如何生成日期选择器。

答案 3 :(得分:0)

form_for与变量一起使用用于bind a form to an object,这意味着表单的每个字段都对应于对象的字段。

例如,假设您有一个包含用户名和年龄字段的用户字段,您可以执行以下操作:

控制器

@user = User.find(params[:id])

查看

<%= form_for(@user) do |f| %>
  <%= f.text_field :username %>
  <%= f.text_field :age %>
<% end %>

用户名和年龄字段将自动设置为当前用户的值。

现在,就你的情况而言。

(我依赖于railscast上的旧日历剧集:http://railscasts.com/episodes/213-calendars

如果您的表单在逻辑上绑定到活动记录,则可以使用calendar_for帮助程序,就像使用form_for帮助程序一样。

因此,如果您的对象是用户:

calendar_for @user, :year => @date.year, :month => @date.month

否则,您必须使用普通的form_tag帮助程序而不绑定对象,并使用calendar_date_select_tag帮助程序插入日历。

此助手in the docs

的更多信息

随时提出任何后续问题。

答案 4 :(得分:0)

我使用这种方法:

- if @user.content_date
  %br/
  = f.text_field :content_date, id: 'datepicker', size: 10
  %br/

用这个id来挑选它。