如何使用简单的表单为 Rails 4 中的枚举属性创建 select
How to create select for enum attribute in Rails 4 with simple Form
我很难弄清楚如何在 Rails 4.2 应用程序上使用 Simple_form 让我的 select 字段为枚举属性工作。
这是我的模型:
class Employee < ActiveRecord::Base
# returns the full name of the employee. This code is found in a concern called name.rb
include Name
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
enum status: [:active, :vacation, :unemployed]
enum os: [:mac, :windows]
validates :first_name,
presence: true,
length: {minimum: 2}
validates :last_name,
presence: true,
length: {minimum: 2}
validates :email, email: true, presence: true, uniqueness: true
validates :paypal_email, email: true, presence: true, uniqueness: true
# validates :status, presence: true
validates :skype_id, presence: true, uniqueness: true
validates :mobile, presence: true, numericality: true, length: {minimum: 10}
validates :address, :province_state, :country, :postal_code, :bachelor_degree, :os, presence: true #, , , ,, :os, presence: true
end
这是我的表格:
<h2>New Employee Registration Form</h2>
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :first_name, required: true, autofocus: true %>
<%= f.input :last_name, required: true %>
<%= f.input :email, required: true%>
<%= f.input :password, required: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %>
<%= f.input :password_confirmation, required: true %>
<%= f.input :paypal_email, required: true%>
<%= f.input :mobile, required: true %>
<%= f.input :skype_id, required: true %>
<%= f.input :address, required: true %>
<%= f.input :province_state, required: true %>
<%= f.input :country, required: true %>
<%= f.input :postal_code, required: true %>
<%= f.input :bachelor_degree, required: true %>
<%= f.input :os, as: :select, collection: Employee.os.keys, selected: 1, required: true %>
<%= f.input :status, as: :select, collection: Employee.status.keys, selected: 1, required: true %>
</div>
<div class="form-actions">
<%= f.button :submit, "Register New Employee" %>
</div>
这是我遇到的错误:
Failure/Error: <%= f.input :status, as: :select, collection: Employee.status.keys, selected: 1, 需要:真 %>
动作视图::模板::错误:
#
的未定义方法“状态”
奇怪的是,相似字段的完全相同的代码恰好 'os' 完美运行。
感谢任何帮助找出此属性产生错误的原因。
你可以这样做:
f.input : os, :collection => Employee.statuses.keys.to_a
您需要使用状态的复数版本。
我很难弄清楚如何在 Rails 4.2 应用程序上使用 Simple_form 让我的 select 字段为枚举属性工作。
这是我的模型:
class Employee < ActiveRecord::Base
# returns the full name of the employee. This code is found in a concern called name.rb
include Name
rolify
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
enum status: [:active, :vacation, :unemployed]
enum os: [:mac, :windows]
validates :first_name,
presence: true,
length: {minimum: 2}
validates :last_name,
presence: true,
length: {minimum: 2}
validates :email, email: true, presence: true, uniqueness: true
validates :paypal_email, email: true, presence: true, uniqueness: true
# validates :status, presence: true
validates :skype_id, presence: true, uniqueness: true
validates :mobile, presence: true, numericality: true, length: {minimum: 10}
validates :address, :province_state, :country, :postal_code, :bachelor_degree, :os, presence: true #, , , ,, :os, presence: true
end
这是我的表格:
<h2>New Employee Registration Form</h2>
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :first_name, required: true, autofocus: true %>
<%= f.input :last_name, required: true %>
<%= f.input :email, required: true%>
<%= f.input :password, required: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %>
<%= f.input :password_confirmation, required: true %>
<%= f.input :paypal_email, required: true%>
<%= f.input :mobile, required: true %>
<%= f.input :skype_id, required: true %>
<%= f.input :address, required: true %>
<%= f.input :province_state, required: true %>
<%= f.input :country, required: true %>
<%= f.input :postal_code, required: true %>
<%= f.input :bachelor_degree, required: true %>
<%= f.input :os, as: :select, collection: Employee.os.keys, selected: 1, required: true %>
<%= f.input :status, as: :select, collection: Employee.status.keys, selected: 1, required: true %>
</div>
<div class="form-actions">
<%= f.button :submit, "Register New Employee" %>
</div>
这是我遇到的错误:
Failure/Error: <%= f.input :status, as: :select, collection: Employee.status.keys, selected: 1, 需要:真 %>
动作视图::模板::错误: #
的未定义方法“状态”奇怪的是,相似字段的完全相同的代码恰好 'os' 完美运行。
感谢任何帮助找出此属性产生错误的原因。
你可以这样做:
f.input : os, :collection => Employee.statuses.keys.to_a
您需要使用状态的复数版本。