3

我在这里使用 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 实例,并希望在一个简单的显示视图中设置它,例如:

profile_controller.rb

def show
  @date ||= Date.today
end

在这样的视图中:

form_for(@date) 做 |f| f.date_select :日期

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

4

5 回答 5

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 的文档:

如果您需要,请随时询问。希望这可以帮助!

于 2013-08-23T15:54:26.950 回答
1

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

#view
= simple_form_for(@date) do |f|
  = f.input :date
于 2013-08-19T19:50:50.697 回答
0

form_for与变量一起使用用于将表单绑定到对象,这意味着表单的每个字段对应于对象的一个​​字段。

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

控制器

@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助手插入日历。

文档中有关此助手的更多信息

随时提出任何后续问题。

于 2013-08-18T09:03:13.147 回答
0
<%= f.date_select(:dob,:start_year => 1950) %>

这应该适合你。我就是这样写的,.html.erb你可以按你的方式写。但这就是生成日期选择器的方式。

于 2013-08-14T13:11:27.563 回答
0

我使用这种方法:

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

使用此 ID 来选择它。

于 2013-08-18T15:10:04.910 回答