2014-04-28 13 views
0

我对Ruby和Rails都很陌生,在选择下拉菜单时先显示当前年份,然后再以降序回溯30年,但遇到问题。我正在使用form_for来生成表单/字段。我该如何使降序选择助手显示日期的form_for?

我可以得到它以升序工作有以下:

<%= builder.label :modelyear, "Model Year" %>   
<%= builder.select :modelyear, (Time.zone.now.year - 30)..(Time.zone.now.year + 0) %> 

这些不工作:

<%= builder.label :modelyear, "Model Year" %>   
<%= builder.select :modelyear, (Time.zone.now.year)..(Time.zone.now.year - 30) %> 

<%= builder.label :modelyear, "Model Year" %>   
<%= builder.select :modelyear, (Time.zone.now.year + 0)..(Time.zone.now.year - 30) %> 

编辑:按要求完整的代码(与选择原创的尝试)

<%= form_for(@user) do |f| %> 
     <%= render 'shared/error_messages' %> 

    <%= f.label :first_name %> 
    <%= f.text_field :first_name %> 
    <br /><br /> 

    <%= f.label :last_name %> 
    <%= f.text_field :last_name %> 
    <br /><br /> 

    <%= f.label :email %> 
    <%= f.text_field :email %> 
    <br /><br /> 

    <%= f.label :address1 %> 
    <%= f.text_field :address1 %> 
    <br /><br /> 

    <%= f.label :address2 %> 
    <%= f.text_field :address2 %> 
    <br /><br /> 

    <%= f.label :city %> 
    <%= f.text_field :city %> 
    <br /><br /> 

    <%= f.label :state %> 
    <%= f.text_field :state %> 
    <br /><br /> 

    <%= f.label :zipcode %> 
    <%= f.text_field :zipcode %> 
    <br /><br /> 

    <%= f.label :country %> 
    <%= f.text_field :country %> 
    <br /><br /> 

    <!-- Fields For Product --> 
    <%= f.fields_for :products do |builder| %> 
    <div> 
      <%= builder.label :serial, "Serial Number" %>   
      <%= builder.text_field :serial %> 
      <br /><br /> 


      <%= builder.label :modelyear, "Model Year" %>   
      <%= builder.select :modelyear, (Time.zone.now.year - 30)..(Time.zone.now.year + 0) %> 
      <br /><br /> 

</div> 
<% end %> 

<%= f.submit "Register Your Product", class: "button" %> 

user.rb

class User < ActiveRecord::Base 
has_many :products, dependent: :destroy 
accepts_nested_attributes_for :products, :allow_destroy => true 
before_save { email.downcase! } 
validates :first_name, presence: true 
validates :last_name, presence: true 
validates :email, presence: true 
validates :address1, presence: true 
validates :address2, length: { maximum: 30 } 
validates :city, presence: true 
validates :state, length: { maximum: 20 } 
validates :zipcode, length: { maximum: 20 } 
validates :country, presence: true 
    end 

product.rb

class Product < ActiveRecord::Base 
belongs_to :user 
validates :serial, presence: true 
validates :modelyear,  length: { maximum: 4 } 
    end 

回答

0

这应该工作

<%= builder.select :modelyear, ((Time.zone.now.year - 30)..(Time.zone.now.year + 0)).to_a.reverse %> 

在这里,我将Range对象转换为Array,该参数也被select接受。所以你可以使用方便的数组reverse方法。

+1

这就像我的形式上的魅力 – runawayj

0

试试这个:

<%= builder.select :modelyear, Time.zone.now.year.downto(Time.zone.now.year - 30) 
.to_a, class:'form-control' %> 
+0

我得到一个错误,试图使用select_year方法“未定义的方法select_year”为#“ – runawayj

+0

我应该提到我的下拉是在嵌套attributes/fields_for窗体。我不知道这是否有所作为。 – runawayj

+0

我不认为这应该有所作为。你能告诉我你的完整代码吗? – jimagic

相关问题