我正在尝试为模型设置一个表单,该表单包含一个从散列中的集合填充的选择框。
具体来说,我的员工模型有一个角色散列:
ROLES = {1 => "Lead", 2 => "Engineer", 3 => "Intern" }
还有一个验证器:
validates_presence_of :role
理想情况下,我想使用此信息在表单中填充一个选择框。诸如:
<%= form_for @employee do |f| %>
<%= label_tag :role, "Role" %>
<%= f.select :employee, :role, Employee::ROLES %>
<% end %>
虽然我可以在选择框中显示值,但数据并未序列化。相反,我收到了“角色不能为空”的验证消息。
我的 Controller 的 create 方法如下所示:
def create
@employee = Employee.new(params[:employee])
if @employee.save
redirect_to employees_path, :notice => "Successfully created a new employee."
else
render :action => 'new'
end
end
最终,我的问题是如何使用模型中的散列填充选择框并将选择框的值正确保存到数据库中员工模型的列中?
最佳答案
如果您遵循建议并使用数组来存储您的角色会更容易,但您不必...我们可以在渲染时将其转换为数组
ROLES = {1 => "Lead", 2 => "Engineer", 3 => "Intern" }
puts ROLES.map{|r| [ r[0], r[1] ]}
=> [[1, "Lead"], [2, "Engineer"], [3, "Intern"]]
select_tag 需要一个 [Name,id] 数组 (Person.all.collect {|p| [ p.name, p.id ] })
(请注意,您不希望 :employee 在这里)
<%= f.select :role, Employee::ROLES.map{|role| [ role[1], role[0] ]} %>
如果你不想同时使用这个:
ROLES = ["Lead", "Engineer", "Intern"]
<%= f.select :role, Employee::ROLES %>
关于ruby-on-rails - 如何使用散列填充选择标记并将值正确保存到数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6065110/