在模型上显示来自枚举的 select 字段时出错
Error displaying select field from enum on model
当我尝试显示我的模型中的 select 枚举下拉列表时出现错误。
我在我的模型中定义了一个枚举 Plants
:
class Plant < ActiveRecord::Base
belongs_to :garden
enum life_cycle: [ :annual, :perennial, :biennial ]
enum sun: [ :full_sun, :part_shade, :full_shade ]
enum sow_method: [ :direct, :indoor, :direct_indoor ]
end
我想要相应的输入来显示那些枚举选项。我从 Saving enum from select in Rails 4.1 看到可以这样处理(在 _form.html.haml
中):
= simple_form_for(@plant) do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :scientific_name
= f.input :height
= f.input :width
= f.input :spacing
= f.input :life_cycle, :as => :select, :collection => Plant.life_cycle.keys.to_a
= f.input :sun
= f.input :sow_method
= f.input :direct_seed_start
= f.input :direct_seed_stop
= f.input :indoor_seed_start
= f.input :indoor_seed_stop
= f.input :transplant_start
= f.input :transplant_stop
= f.association :garden
.form-actions
= f.button :submit
当我尝试访问编辑页面时出现 "undefined method" 错误。我是 ruby 的新手,所以我可能误解了一些简单的事情...
谢谢
我在我的一种表格中做过这样的事情(使用 simple_form
):
= f.select :life_cycle, Plant.life_cycles.keys
答案前的几个例子
# Assume life_cycle was set to 'annual'
puts p.life_cycle
#=> "annual"
p.life_cycle = 0 # set life_cycle as 0
puts p.life_cycle
#=> "annual"
p.life_cycle = 2 # we set to biennial
puts p.life_cycle
#=> "biennial"
您也可以通过 p.annual? results in true or false
查看 life_cycle
是否每年一次
当你这样做时,使用枚举的复数形式,你可以在 class 上作为 class 方法访问它。
puts Plant.life_cycles
{"annual" => 0, "perennial" => 1, "biennial" => 2}
是的,正如@razr 所描述的那样,您将使用 class 方法获取散列并提取密钥以形成您的 select 菜单,即 Plant.life_cycles.keys
当我尝试显示我的模型中的 select 枚举下拉列表时出现错误。
我在我的模型中定义了一个枚举 Plants
:
class Plant < ActiveRecord::Base
belongs_to :garden
enum life_cycle: [ :annual, :perennial, :biennial ]
enum sun: [ :full_sun, :part_shade, :full_shade ]
enum sow_method: [ :direct, :indoor, :direct_indoor ]
end
我想要相应的输入来显示那些枚举选项。我从 Saving enum from select in Rails 4.1 看到可以这样处理(在 _form.html.haml
中):
= simple_form_for(@plant) do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :scientific_name
= f.input :height
= f.input :width
= f.input :spacing
= f.input :life_cycle, :as => :select, :collection => Plant.life_cycle.keys.to_a
= f.input :sun
= f.input :sow_method
= f.input :direct_seed_start
= f.input :direct_seed_stop
= f.input :indoor_seed_start
= f.input :indoor_seed_stop
= f.input :transplant_start
= f.input :transplant_stop
= f.association :garden
.form-actions
= f.button :submit
当我尝试访问编辑页面时出现 "undefined method" 错误。我是 ruby 的新手,所以我可能误解了一些简单的事情...
谢谢
我在我的一种表格中做过这样的事情(使用 simple_form
):
= f.select :life_cycle, Plant.life_cycles.keys
答案前的几个例子
# Assume life_cycle was set to 'annual'
puts p.life_cycle
#=> "annual"
p.life_cycle = 0 # set life_cycle as 0
puts p.life_cycle
#=> "annual"
p.life_cycle = 2 # we set to biennial
puts p.life_cycle
#=> "biennial"
您也可以通过 p.annual? results in true or false
life_cycle
是否每年一次
当你这样做时,使用枚举的复数形式,你可以在 class 上作为 class 方法访问它。
puts Plant.life_cycles
{"annual" => 0, "perennial" => 1, "biennial" => 2}
是的,正如@razr 所描述的那样,您将使用 class 方法获取散列并提取密钥以形成您的 select 菜单,即 Plant.life_cycles.keys