Ruby on rails Rails-在select_标记帮助器中将我的表单选项手动列为字符串是否有问题?
在select_标记帮助器中将我的表单选项手动列为字符串是否有问题 另外,我想知道——我实际上如何使用所选的值来更新数据库Ruby on rails Rails-在select_标记帮助器中将我的表单选项手动列为字符串是否有问题?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在select_标记帮助器中将我的表单选项手动列为字符串是否有问题 另外,我想知道——我实际上如何使用所选的值来更新数据库 <div class="form-group"> <%= f.label :sex %><br /> <%= select_tag(:sex_id, options_for_select( [ ["Not known", 0], ["Male", 1], ["Female", 2],
<div class="form-group">
<%= f.label :sex %><br />
<%= select_tag(:sex_id, options_for_select(
[
["Not known", 0], ["Male", 1], ["Female", 2], ["Not applicable", 3]
]
)) %>
将选项硬编码到视图中的方式将导致查找困难,无法实现本地化/国际化
有很多方法可以做得更好。这里有一些你要考虑的。< /P>
使用提供枚举的模块,例如:
module Gender
UNKNOWN = 0
MALE = 1
...
GENDER = {
0 => "Not Known",
1 => "Male",
...
GENDER = [
"Not Known",
"Male",
...
class Gender < ActiveRecord::Base
# has fields for id and name
end
使用常量哈希查找,例如:
module Gender
UNKNOWN = 0
MALE = 1
...
GENDER = {
0 => "Not Known",
1 => "Male",
...
GENDER = [
"Not Known",
"Male",
...
class Gender < ActiveRecord::Base
# has fields for id and name
end
使用索引为id的常量数组,例如:
module Gender
UNKNOWN = 0
MALE = 1
...
GENDER = {
0 => "Not Known",
1 => "Male",
...
GENDER = [
"Not Known",
"Male",
...
class Gender < ActiveRecord::Base
# has fields for id and name
end
使用结构数组,例如属性键值对:
GENDER = [
{id: 0, label: "Not Known"},
{id: 1, label: "Male"},
...
使用数据库表,例如:
module Gender
UNKNOWN = 0
MALE = 1
...
GENDER = {
0 => "Not Known",
1 => "Male",
...
GENDER = [
"Not Known",
"Male",
...
class Gender < ActiveRecord::Base
# has fields for id and name
end
class-Gender
使用Rails 4.1枚举:
class User < ActiveRecord::Base
enum gender: [ :unknown, :male, ... ]
...
class用户
每一种选择都有其优点
- 一般来说,我建议对典型的web应用程序或典型的API使用数据库表方法;表方法有许多优点,可以更容易地确定范围、搜索、排序、使用管理工具自动显示等
- 一般来说,如果您需要高速,或者有非常严格的存储限制,或者希望在其他地方保留本地化/国际化字符串,例如YAML文件,我建议使用模块方法;模块方法存储的信息量最小
integer
的属性可以在相应的模型中声明(我假设User
):
在这种情况下,您可以依赖这样一个事实,即系统需要相应的字符串,而不是整数:
<%= f.input :gender, as: :select, collection: User.genders.keys %>
或者自己映射它们以生成所需内容:“人类可读名称”甚至i18n密钥:
<%= f.input :gender, as: :select,
collection: User.genders.keys.map { |w| [w.humanize, w] } %>
<%= f.input :gender, as: :select,
collection: User.genders.keys.map { |w| [(t ".w"), w] } %>
这本书没有什么“黑”的地方。相反,这可能是最不安全的代码。:)不过,这不是恭维:)好吧。我是这里的新手,正在努力理解你写的东西。首先,您的第一个代码示例去了哪里?在用户模型中?在性爱模式中?这与ActiveRecord有什么关系?是否有一个我可以阅读或观看的资源可以对我进行更多的分解?第一个代码示例将指向具有此属性的模型。至于文档,我们将在稍后添加一个链接。