我表单中的所有隐藏字段都显示为未允许的参数

时间:2014-01-03 14:45:22

标签: ruby-on-rails-4 simple-form

我有预设的日期,所以我试图在表单中隐藏字段,但是当我隐藏它们时,我得到以下内容:

  

未经许可的参数: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

1 个答案:

答案 0 :(得分:1)

如果没有关于您的应用的每个细节,很可能您的属性不会得到。是否缺少attr_accessible模型声明或控制器中的强参数声明。看看这篇文章,看看你是否遇到了类似的问题:

Rails 4 Nested Attributes Unpermitted Parameters