我在这里使用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
这样的东西,但这显然不起作用也不正确
答案 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来挑选它。