2016-12-15 3 views
2

나는 아래처럼 내 모델의 ActiveModel이핸들 날짜는

{"no_of_codes"=>"12", "start_date(1i)"=>"2016", "start_date(2i)"=>"12", "start_date(3i)"=>"15", "end_date(1i)"=>"2017", "end_date(2i)"=>"1", "end_date(3i)"=>"15"} 

물론이 나에게 오류

을 제공합니다
undefined method `start_date(1i)=' 

내 컨트롤러에서 모델을 시작할 때.

@promotion_codes_generator = PromotionCodesGenerator.new(promotion_codes_generator_params) 

어떻게 날짜를 올바르게 처리해야합니까? 당신은 보석을 사용할 수 있습니다 as: :string

<%= f.input :start_date, as: :string, default: Time.zone.now, wrapper_tag: :p %> 
<%= f.input :end_date, as: :string, default: Time.zone.now + 1.month, wrapper_tag: :p %> 
+1

날짜 도우미를 사용하지 마십시오. 자바 스크립트 datepickers 및 간단한 텍스트 입력과 함께 이동하십시오. – jvnill

+2

http://stackoverflow.com/questions/22798691/how-to-handle-date-fields-in-a-non-model-rails-form – Pavan

+0

이러한 솔루션 중 하나가 효과가있는 경우 답변을 선택하십시오. – jlesse

답변

0

봅니다 multiparameter_attributes_handler을했다. params에 적용하면 end_datestart_date에 대한 항목이 만들어지며 날짜 개체는 양식 요소 제출에서 생성됩니다. 이렇게하면 레일 도우미 날짜 드롭 다운을 유지할 수 있습니다.

0

으로 as: :date를 교체

0

간단한 양식 사용자 지정 입력과 함께 JQuery 날짜 선택 도구를 사용합니다. 이 방법은 미국식 시간 (mm/dd/yyyy)을 표시하고 alt_field를 통해 레일 형식 (yyyy-mm-dd) 필드를 제출하려는 경우 특히 유용합니다. 이렇게하려면 jquery-rails 보석을 설치해야합니다.

는 응용 프로그램/입력/datepicker_input.rb의 날짜에 대한 사용자 지정 단순한 형태의 입력 작성이 사용자 입력은 사용자에게 형식의 날짜를 표시하는 텍스트 필드를 만들고

class DatepickerInput < SimpleForm::Inputs::StringInput 
    def input(wrapper_options) 
     merged_input_options = merge_wrapper_options(input_html_options, wrapper_options) 
     class_name = object.class.name.underscore + "_" 
     "#{@builder.text_field(attribute_name, merged_input_options)}".html_safe + 
     "#{@builder.hidden_field(attribute_name, { id: class_name + attribute_name.to_s + '-alt'}) }".html_safe 
    end 
end 

, 그리고 숨겨진 필드로 표시된 텍스트 필드 대신 제출됩니다. 숨겨진 필드가 주어지고 class_name + attribute_name + -alt의 ID입니다. 이 id는 JQuery 날짜 선택 도구 초기화에서 숨겨진 필드를 지정하는 데 사용됩니다. "YY-의 형식으로 altField

$("#admin_start_date").datepicker({ 
    dateFormat: "mm/dd/yy", 
    altFormat: "yy-mm-dd", 
    altField: $("#admin_start_date-alt") 
}); 

$("#admin_end_date").datepicker({ 
    dateFormat: "mm/dd/yy", 
    altFormat: "yy-mm-dd", 
    altField: $("#admin_end_date-alt") 
}); 

님"과 같은 : 날짜 선택기 "당신의 자바 스크립트에서

<%= simple_nested_form_for ([:admin, @promotion_codes_generator]) do |f| %> 
     <%= f.input :start_date, as: :datepicker, default: Time.zone.now, wrapper_tag: :p %> 
     <%= f.input :end_date, as: :datepicker, default: Time.zone.now + 1.month, wrapper_tag: :p %> 
<% end %> 

: 단순히"날짜로 "변경 양식에서

mm-dd "가 표시된"mm/dd/yy "필드 대신 제출됩니다. 귀하의 컨트롤러에서 단순히 당신이 이미 당신이 객체 start_date 및 end_date 매개 변수를 허용합니다.