我想创建一个大的复选框区域,可能有大约30个复选框。我希望,而不是硬写每个复选框,从db或翻译yml填充它。如何从yml创建此循环?我猜这是不好的做法?如果是这样,如何循环db值?
答案 0 :(得分:1)
颜色复选框的示例:
# 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
这是一个颜色的动态列表,可以通过Web界面轻松维护(无需重启服务器)。您可以对这些操作执行基本的CRUD(创建检索更新删除)操作,而YAML文件无法轻松处理(可以在运行时重写和重新加载文件但是在比较中哇哇哇哇使用Color模型进入" Rails'方式"
# 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' ] }
这取决于您的需求: