【问题标题】:Rails checkboxes/form based on YML/DB基于 YML/DB 的 Rails 复选框/表单
【发布时间】:2014-07-17 20:40:52
【问题描述】:

我想创建一个包含大约 30 个复选框的大复选框区域。我不想硬写每个复选框,而是从数据库或翻译 yml 填充它。我将如何从 yml 创建这个循环?我猜这是不好的做法?如果是这样,如何循环获取 db 值?

【问题讨论】:

  • @MrYoshiji,是的,看起来不错。当我可以实施和测试时,我会回答。很好的回应,谢谢。

标签: ruby-on-rails forms internationalization yaml


【解决方案1】:

颜色复选框示例:

来自 YAML:

# controller
def show
  @options = YAML.load(File.read(Rails.root.join('db', 'fixtures', 'checkboxes.yml')))

# view
Check the colors you want:
- @options.each do |option|
  = option
  = check_box_tag 'colors[]', option

# example of received parameters:
params = { colors: [ 'red', 'blue' ] }

# db/fixtures/checkboxes.yml
---
- Blue
- Red
- White
- Black
- Green
- Yellow

这是一个预定义颜色的静态列表,这意味着您需要手动编辑 YML 文件并重新启动服务器才能查看此列表中的更改。

这是一个缺点吗?是与否,取决于你想做什么。


来自数据库:

# controller
def show
  @options = Color.all.map{ |color| [color.name, color.id] }

# view
Check the colors you want:
- @options.each do |option_name, value|
  = option_name
  = check_box_tag 'colors[]', value

# example of received parameters:
params = { colors: [1,2,3] } # ids of Color records

这是一个动态的颜色列表,可以通过网络界面轻松维护(无需重新启动服务器)。您可以对这些执行基本的 CRUD(创建检索更新删除)操作,而 YAML 文件不能那么容易处理(可以即时重写和重新加载文件,但 WAOW 相比之下真是太痛苦了使用 Color 模型实现“Rails 方式”。


从 I18n 的翻译文件中加载:

# implying that en.posts.colors is a list of color names
en:
  # ...
  posts:
    # ...
    colors:
      black: Black
      red: Red
      white: White

# view
- t('posts.colors').each do |i18n_key, color_name|
  = color_name
  = check_box_tag 'colors[]', color_name

# example of received parameters:
params = { colors: [ 'red', 'blue' ] }

如何决定?

这取决于你需要什么:

  • 您需要静态列表吗? (经典用法:国家、语言、颜色、性别等)-> 选择 YAML 选项
  • 您需要动态列表吗? (经典用法:用户、类别、可在应用内编辑的内容)-> 选择模型选项

【讨论】:

  • 好好。如果我想在 en->posts->categories 的翻译文件中选择一行怎么办?可能的?我认为 db 将是最好的选择。
  • @KevinBrown 我用 I18n 的示例和数据库记录更新了我的答案。
  • 还有一件事...如果我想将其用作动态字段,其中字段全部由数据库值填充,如“名称、类型、默认值”,我如何在帖子中允许动态字段型号??
猜你喜欢
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多