我正在使用带有简单形状和茧宝石的rails 5.
我的模特叫Tenor。
次要表单字段嵌套在父模型中。中学模型中的属性是:
<div class="nested-fields">
<div class="form-inputs">
<div class="row">
<div class="col-md-4">
<%= f.input :express_interest, :as => :date_picker, :label => 'When are expressions of interest due?' %>
</div>
<div class="col-md-4">
<%= f.input :commencement, :as => :date_picker, :label => 'Commencement date' %>
</div>
<div class="col-md-4">
<%= f.input :expiry, :as => :date_picker, :label => 'Expiry date' %>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6" style="margin-bottom: 50px">
<%= link_to_remove_association 'Remove schedule', f %>
</div>
</div>
</div>
通过以下链接将次要表单字段呈现在另一个表单中:
<%= f.simple_fields_for :tenor do |f| %>
<%= f.error_notification %>
<%= render 'tenors/tenor_fields', f: f %>
<% end %>
<%# unless @bip.tenor.present? %>
<%= link_to_add_association 'Add key dates', f, :tenor, partial: 'tenors/tenor_fields', force_non_association_create: true %>
<%# end %>
bip和男高音之间存在一对一的关联。
当我编辑现有记录时,date_picker正常工作。我可以点击日历图标,它会显示日历。
但是,当我尝试创建新记录时,date_picker不会执行任何操作。我点击日历图标,没有任何反应。 chrome检查器中没有显示控制台错误。我可以在输入框中手动输入日期,但我无法从日历中选择日期。我可以提交带有手动插入日期的表单,但日期细节不会保存到数据库中(记录保持为“无”)。
我的输入/ date_picker_input.rb有
class DatePickerInput < SimpleForm::Inputs::StringInput
def input(wrapper_options)
set_html_options
set_value_html_option
template.content_tag :div, class: 'input-group date datetimepicker' do
input = super(wrapper_options) # leave StringInput do the real rendering
input + input_button
end
end
def input_html_classes
super.push '' # 'form-control'
end
private
def input_button
template.content_tag :span, class: 'input-group-btn' do
template.content_tag :button, class: 'btn btn-default', type: 'button' do
template.content_tag :span, '', class: 'fa fa-calendar'
end
end
end
def set_html_options
input_html_options[:type] = 'text'
input_html_options[:data] ||= {}
input_html_options[:data].merge!(date_options: date_options)
end
def set_value_html_option
return unless value.present?
input_html_options[:value] ||= I18n.localize(value, format: display_pattern)
end
def value
object.send(attribute_name) if object.respond_to? attribute_name
end
def display_pattern
I18n.t('datepicker.dformat', default: '%d/%m/%Y')
end
def picker_pattern
I18n.t('datepicker.pformat', default: 'DD/MM/YYYY')
end
def date_view_header_format
I18n.t('dayViewHeaderFormat', default: 'MMMM YYYY')
end
def date_options_base
{
locale: I18n.locale.to_s,
format: picker_pattern,
dayViewHeaderFormat: date_view_header_format
}
end
def date_options
custom_options = input_html_options[:data][:date_options] || {}
date_options_base.merge!(custom_options)
end
end
如果我正在编辑现有记录,那么有人可以想到为什么date_picker可以正常工作但如果我想创建新记录则无法正常工作吗?
在控制器中创建操作
组织
def create
@organisation = Organisation.new(organisation_params)
respond_to do |format|
if @organisation.save
format.html { redirect_to @organisation, notice: 'Organisation was successfully created.' }
format.json { render :show, status: :created, location: @organisation }
else
format.html { render :new }
format.json { render json: @organisation.errors, status: :unprocessable_entity }
end
end
end
的Bip
def create
@bip = Package::Bip.new(bip_params)
# authorize @bip
respond_to do |format|
if @bip.save
format.html { redirect_to @bip }
format.json { render :show, status: :created, location: @bip }
else
format.html { render :new }
format.json { render json: @bip.errors, status: :unprocessable_entity }
end
end
end
男高音
def create
@tenor = Tenor.new(tenor_params)
# authorize @tenor
respond_to do |format|
if @tenor.save
format.html { redirect_to @tenor }
format.json { render :show, status: :created, location: @tenor }
else
format.html { render :new }
format.json { render json: @tenor.errors, status: :unprocessable_entity }
end
end
end
新动作
组织
def new
@organisation = Organisation.new
@organisation.bips
# @organisation.bips.build_tenor
end
BIPS
def new
@bip = Package::Bip.new
# authorize @bip
end
男高音
def new
@tenor = Tenor.new
# authorize @tenor
end