我有预设的日期,所以我试图在表单中隐藏字段,但是当我隐藏它们时,我得到以下内容:
未经许可的参数:start_date,end_date,id
所以我的模型验证会出现一个错误,说它不能留空。
但是,我可以看到它传递了值:
"appointment"=>{"service_id"=>"2", "car_id"=>"1",
"start_date"=>"Tue Dec 31 2013 09:30:00 GMT 0000 (GMT)",
"end_date"=>"2013-12-31T10:30:00+00:00",
"garage"=>"0",
"in_note"=>"",
"out_note"=>"",
"id"=>""},
"commit"=>"Create"}
我注意到start_date上的格式化问题,但是当我不隐藏这些参数时,它工作正常。
我正在使用:
<%= f.input :start_date, :as => :hidden %>
<%= f.input :end_date, :as => :hidden %>
但也尝试过:
<%= f.hidden_field :start_date %>
<%= f.hidden_field :end_date %>
具有相同的结果。
CONTROLLER
def new
@car = params[:car_id];
@date = DateTime.parse(params[:start_date])
@appointment = Appointment.new(:end_date => @date + 1.hour, :start_date => @date, :car_id => @car)
render :json => {:form => render_to_string(:partial => 'form')}
end
FORM(需要整理一下)
<%= simple_form_for(@appointment, :html => { :id => 'event_form' }) do |f| %>
<%= f.error_notification %>
<div class="inputs">
<%= f.association :service,
label_method: :name,
value_method: :id %>
<%= f.association :car,
label_method: :make,
value_method: :id %>
<%= f.hidden_field :start_date %>
<%= f.hidden_field :end_date %>
<%= f.input :garage %>
<%= f.input :in_note %>
<%= f.input :out_note %>
</div>
<%=f.hidden_field :id, :value => @appointment.id %>
<p>
<%=f.submit 'Create' %> <span id = "creating_appointments" class="spinner" style = "display:none;">Creating, Please wait...</span>
</p>
<div class="actions">
<%= f.button :submit %>
</div>
<% end %>
MODEL
class Appointment < ActiveRecord::Base
belongs_to :car
belongs_to :service
accepts_nested_attributes_for :service
accepts_nested_attributes_for :car
attr_accessor :period, :frequency, :commit_button
validates_presence_of :car_id, :service_id, :start_date, :end_date
#validate :validate_timings
def validate_timings
p start_date, end_date
if (start_date > end_date)
errors[:base] << "Start Time must be less than End Time"
end
end
end
答案 0 :(得分:1)
如果没有关于您的应用的每个细节,很可能您的属性不会得到。是否缺少attr_accessible
模型声明或控制器中的强参数声明。看看这篇文章,看看你是否遇到了类似的问题: