我是Rails的新手,我遇到了一些麻烦,我认为我的问题与这个问题类似,但在那里没有得到解决(并且似乎不是使用hidden_field的最佳做法): Turning a calendar into a form using Rails?
我想建立一个日历,在这个日历中,有人通过在他们旅行的特定日期输入里程来跟踪自行车里程。
我正在使用https://github.com/watu/table_builder来构建我的日历,它看起来像这样:
index.html.erb
<%= calendar_for(@miles, :year => @date.year, :month => @date.month) do |t| %>
<%= t.head('mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun') %>
<%= t.day(:day_method => :day_logged) do |day, miles| %>
<%= day.day %>
<%= render 'form', :day => day %>
<% miles.each do |mile| %>
<h3><%= h(mile.distance) %></h3>
<% end %>
<% end %>
<% end %>
_form.html.erb
<%= form_for @mile, url: {action: "create"}, html: {class:"mile_form"} do |f| %>
<%= f.hidden_field :day_logged, day %>
<p>
<%= f.label :distance, "Miles ridden" %>
<%= f.number_field :distance %>
<%= f.submit "Add" %>
</p>
trips_controller.rb
def index
@mile = Mile.new
@miles = Mile.find(:all)
@date = params[:month] ? Date.parse("#{params[:month]}-01") : Date.today
end
def create
@mile = Mile.new(params[:distance])
if @mile.save
redirect_to root_path
else
## ???
end
end
mile.rb
validates :distance, presence: true, :numericality => {:only_integer => true}
validates :day_logged, presence: true
schema.rb
create_table "miles", force: true do |t|
t.integer "distance"
t.date "day_logged"
t.datetime "created_at"
t.datetime "updated_at"
end
我尝试过隐藏字段选项并收到此错误:
NoMethodError in Trips#index
undefined method `merge' for Sun, 26 Jan 2014:Date
我对此非常感到困惑,我认为无论如何这都是最好的方式。任何帮助将不胜感激。
答案 0 :(得分:0)
hidden_field方法的第二个参数是选项的哈希值,而不是值。所以不要这样:
<%= f.hidden_field :day_logged, day %>
这样做:
<%= f.hidden_field :day_logged, value: day %>
顺便说一下,在你的职业生涯中,你可能会犯同样的错误大约32,000次。