问题:如何将日历转换为呈现日期选择以匹配日历日而非当前日期的表单?
我正在尝试做什么: 我想创建一个显示骑车人锻炼的日历。
每次锻炼都有很多间隔。每个日历日都有一次锻炼。
插件: 从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
<div id ="calendar">
<%= calendar_for @workouts, :year => @date.year, :month => @date.month do |calendar| %>
<%= calendar.head('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday') %>
<% calendar.day(:day_method => :workoutdate) do |date, workouts| %>
<%= date.day %>
<%= render 'form' %>
<% end %>
<% end %>
</div>
视图/训练/ _form.html.erb
<%= nested_form_for @workout do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :workoutdate %><br />
<%= f.date_select :workoutdate %>
</p>
<%= f.fields_for :intervals %>
<p><%= f.link_to_add "Add interval", :intervals %></p>
<p><%= f.submit "Submit" %></p>
<% end %>
视图/训练/ _interval_fields.html.erb
<p>
<%= f.label :interval_name, "Interval" %>
<%= f.text_field :interval_name %>
<%= f.link_to_remove "remove" %>
</p>
目前正在使用heroku http://billeee.herokuapp.com/workouts
答案 0 :(得分:1)
由于您在day
方法的块中有可用日期,因此您应该可以将其传递给部分,如下所示:
<% calendar.day(:day_method => :workoutdate) do |date, workouts| %>
<%= date.day %>
<%= render 'form', :date => date %>
<% end %>
然后你可以在局部形式中使用它,并通过你刚刚传入的局部变量设置日期选择的日期:
<%= f.date_select :workoutdate, :default => date %>
作为一个注释:这个方法看起来有点滑稽,因为无论如何你总是在特定的一天渲染这个形式。为什么不发送日期,例如通过隐藏的输入字段?用户是否应该更改日期?如果是这样,那不会打破UI逻辑吗?