使用Rails将日历转换为表单?

问题 :如何将日历转换为呈现日期选择以匹配日历日而不是当前日期的表单?


我正在尝试做什么:我想创建一个显示骑车者锻炼的日历。

  • 在每个日历日内创建锻炼,自动渲染与表单中给定日期匹配的锻炼日期

每次锻炼都有很多间隔。 每个日历日都有一次锻炼。

插件:从https://github.com/p8/table_builder中提取table_builder.rb和calendar_helper.rb(gem和插件都不使用rails 3.1进行部署)

class WorkoutsController.rb

def new @workout = Workout.new @date = params[:month] ? Date.parse(params[:month].gsub('-', '/')) : Date.today 3.times do @workout.intervals.build end end 

Workout.rb

  attr_accessible :workoutdate, :intervals_attributes has_many :intervals, :dependent => :destroy accepts_nested_attributes_for :intervals, :reject_if => lambda { |a| a[:interval_name].blank? }, :allow_destroy => true 

Interval.rb

 attr_accessible :interval_name, :workout_id belongs_to :workout 

视图/训练/ new.html.erb

 
@date.year, :month => @date.month do |calendar| %> :workoutdate) do |date, workouts| %>

视图/训练/ _form.html.erb

   


视图/训练/ _interval_fields.html.erb

 

目前在heroku http://billeee.herokuapp.com/workouts上

由于您在日期块方法中有可用的日期,因此您应该能够将其传递给部分,如下所示:

 <% calendar.day(:day_method => :workoutdate) do |date, workouts| %> <%= date.day %> <%= render 'form', :date => date %> <% end %> 

然后你可以在局部forms中使用它,并通过你刚刚传入的局部变量设置日期选择的日期:

 <%= f.date_select :workoutdate, :default => date %> 

作为一个注释:这个方法似乎有点滑稽,因为你总是在特定的一天渲染这个forms。 为什么不通过隐藏的输入字段发送日期? 用户是否应该更改日期? 如果是这样,那不会打破UI逻辑吗?