ruby-on-rails - 如何使用散列填充选择标记并将值正确保存到数据库?

标签 ruby-on-rails select hash form-helpers

我正在尝试为模型设置一个表单,该表单包含一个从散列中的集合填充的选择框。

具体来说,我的员工模型有一个角色散列:

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/

相关文章:

ruby-on-rails - inverse_of 有什么作用?它生成什么 SQL?

ruby-on-rails - Ruby 修改嵌套哈希的元素

ruby-on-rails - 获取回形针附件的绝对 URL

mysql - 在 MySQL 中使用子查询进行多次插入

perl - 如何从 Perl 中的现有散列创建匿名散列?

ruby-on-rails - rails 中未定义的方法 `to_model'

jquery 检查是否选择了选项

sql - 如何在 SQL 中实现 "hasChildren"SELECT 语句?

c# - 我对这段代码不了解。哈希

hash - DPDK Hash 无法从辅助进程中查找数据