Ruby on rails 如何避免多重if/else
我是Rails新手,我正在尝试找到一种更好的方法:我使用从YAML文件读取的Rake任务将一些种子数据加载到数据库中 Template.YAML:Ruby on rails 如何避免多重if/else,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我是Rails新手,我正在尝试找到一种更好的方法:我使用从YAML文件读取的Rake任务将一些种子数据加载到数据库中 Template.YAML: - file_name: Template1 description: temp1 required_fields: address - file_name: Template2 description: temp2 required_fields: user_id,user_n
- file_name: Template1
description: temp1
required_fields: address
- file_name: Template2
description: temp2
required_fields: user_id,user_name
- file_name: Template3
description: temp3
required_fields: user_id,address
在我看来,我有一个下拉列表,用户可以在其中选择要加载的模板,并且根据他选择的模板,我需要显示文本框以获取运行模板所需的字段
Template.html.slim:
dt
label for="template_name" Select The Template To Run
dd
= select_tag :template_name,options_for_select(@template_seed_data_array.insert(0, "Please select the template")), :onchange => "Template.toggleRequiredFields(); return false"
#user_id style="display:none"
dt
label for="user_id" Enter User Id
dd
= text_field_tag :user_id, @template_library[:user_id]
#user_name style="display:none"
dt
label for="user_name" Enter user name
dd
= text_field_tag :user_name, @template_library[:user_name]
.
.
.
在我的coffescript中,根据用户选择的内容,我执行了一系列if/else来隐藏和显示这些文本框
模板.咖啡:
toggleRequiredFields: ->
Template = $('#template_name').val()
if Template in ['Template3','Template2']
$('#user_id').show();
.
.
else
$('#user_id').hide();
.
.
随着时间的推移,模板的数量越来越多,if/else逻辑也越来越混乱。当用户选择模板时,是否有更好的方法执行此隐藏/显示切换?如果将
模板.YAML
文件作为JSON公开给客户端,这应该很容易
在视图中的JavaScript标记中添加模板数据的JSON转储:
:javascript
var templates = #{@templates.to_json};
然后编写一些代码从中读取:
:coffeescript
template = null
templateName = $('#template_name').val()
# Find the proper template configuration
for templateConfig in templates
if templateName == template.file_name
template = templateConfig # found it!
# Hide all fields.
$('form input').hide() # or whatever selects everything you want to hide
# Show just the fields we need.
for fieldID in template.required_fields
$("##{ fieldID }").show()
从这里,您可以向模板配置文件中添加几十个条目,或者更改显示的字段,并且您根本不需要更改代码。如果您将
模板.YAML
文件作为JSON公开给客户端,这应该很容易
在视图中的JavaScript标记中添加模板数据的JSON转储:
:javascript
var templates = #{@templates.to_json};
然后编写一些代码从中读取:
:coffeescript
template = null
templateName = $('#template_name').val()
# Find the proper template configuration
for templateConfig in templates
if templateName == template.file_name
template = templateConfig # found it!
# Hide all fields.
$('form input').hide() # or whatever selects everything you want to hide
# Show just the fields we need.
for fieldID in template.required_fields
$("##{ fieldID }").show()
从这里,您可以向模板配置文件中添加几十个条目,或者更改显示的字段,而无需更改代码。谢谢,您的方法太棒了。我正在考虑使用data属性来存储与该文本字段关联的文件名。你对这种方法的想法是什么?听起来它的规模不大。如果有很多模板,那么这些数据属性可能会很长,或者很多。在这种情况下,我认为JS中的数据比HTML中的数据更有意义。我正在考虑使用data属性来存储与该文本字段关联的文件名。你对这种方法的想法是什么?听起来它的规模不大。如果有很多模板,那么这些数据属性可能会很长,或者很多。在这种情况下,我认为JS中的数据比HTML中的数据更有意义。