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

Ruby on rails 使用Rails将日历转换为表单?,ruby-on-rails,ruby,calendar,ruby-on-rails-3.1,nested-forms,Ruby On Rails,Ruby,Calendar,Ruby On Rails 3.1,Nested Forms,问题:如何将日历转换为dateselect呈现为与日历日而不是当前日期匹配的表单 我想做什么: 我想创建一个日历,显示骑车人的训练 在每个日历日内创建训练,自动在表单中呈现与给定日期匹配的训练日期 每项训练都有许多间隔。每个日历日有一次锻炼 插件: 从中提取了表_builder.rb和日历_helper.rb(gem和plugin都不使用rails 3.1部署) 类WorkoutsController.rb def new @workout = Workout.new

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


我想做什么: 我想创建一个日历,显示骑车人的训练

  • 在每个日历日内创建训练,自动在表单中呈现与给定日期匹配的训练日期
每项训练都有许多间隔。每个日历日有一次锻炼

插件: 从中提取了表_builder.rb和日历_helper.rb(gem和plugin都不使用rails 3.1部署)

类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>

@date.year,:month=>@date.month do | calendar |%>
:workoutdate)do | date,workouts |%>
视图/训练/_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 %>



视图/训练/_间隔_fields.html.erb

<p>
  <%= f.label :interval_name, "Interval" %>
  <%= f.text_field :interval_name %>
  <%= f.link_to_remove "remove" %>
</p>


当前在heroku上

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

<% calendar.day(:day_method => :workoutdate) do |date, workouts| %>
  <%= date.day %>
  <%= render 'form', :date => date %>
<% end %>
:workoutdate)do| date,workouts |%>
日期%>
然后,您可以在表单partial中使用它,并通过刚刚传入的局部变量设置日期选择的日期:

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

需要注意的是:这个方法似乎有点滑稽,因为您总是在某一天呈现这个表单。为什么不发送日期,例如通过隐藏的输入字段?用户是否应该更改日期?如果是这样的话,这不是破坏了用户界面逻辑吗?

谢谢!!!真是太棒了!我是“用户”,我用它来写我的运动员训练计划。我是一名自行车教练,所以我每月都会向他们介绍他们的训练情况,作为他们计划的一部分。再次,非常感谢。Re:隐藏字段,我来试试。你是完全正确的,一个隐藏的领域是前进的方向。使用隐藏的日期字段,有时我需要编辑训练的日期。jQuery现在看起来很性感。我必须承认,我不太熟悉UI逻辑,但我会进一步研究它。还是新的,还有很多东西要学。很高兴听到它起作用了。如果您正在查看jQuery,您甚至可以考虑将整个表单移动到一个模式覆盖中,以保持视图更加干净。但这取决于你的需要。模态叠加真的很好。我会记住的。仍然只是想把基本的东西弄清楚。再次感谢。