Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-在select_标记帮助器中将我的表单选项手动列为字符串是否有问题?_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails-在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],

在select_标记帮助器中将我的表单选项手动列为字符串是否有问题

另外,我想知道——我实际上如何使用所选的值来更新数据库

  <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有什么关系?是否有一个我可以阅读或观看的资源可以对我进行更多的分解?第一个代码示例将指向具有此属性的模型。至于文档,我们将在稍后添加一个链接。