ruby-on-rails - 如何验证取决于复选框的输入
问题描述
我最近开始使用 Rails。我在这里有一项任务,但我不知道什么是最佳实践以及如何去做。
我有带有复选框currency?
和输入的表单currency_code
。只有值currency_code
将存储在数据库中。
我需要什么: 1. 如果复选框currency?
为 TRUE =>currency_code
必须填写 2. 如果复选框currency?
为 FALSE =>currency_code
将重置为 nil
如何验证 1. 如果currency?
不在数据库中(表列)所以模型不知道这个?在情况 2. 我应该在哪里检查并将值重置currency_code
为零?
对于案例 2。我的控制器中有这个,但我不喜欢。我认为必须有更好的解决方案。
def data_params
parameters = params.require(:data).permit(
:currency_code
)
parameters[:currency_code] = nil unless params[:data][:currency].to_bool
parameters
end
解决方案
属性“货币?” 不属于模型的部分称为虚拟属性。在 Rails 中,我们可以通过设置来使用虚拟属性
attr_accessor :currency?
在您对应的_model.rb 中。
现在您可以使用这种“货币”了吗?表单中的属性与其他模型属性一样。
对于案例 2,这种数据验证的设置是在进入模型之前在视图中验证它们。您必须使用 jquery / javascript 或您选择的任何脚本。在这里,我提供了 jQuery 片段。
如果您是在 Rails 应用程序中使用 jquery 的新手,请遵循此https://github.com/rails/jquery-rails
在您的 form_page.html.erb 中为 html 元素添加 id。
<%= f.check_box :currency?, id: 'currency_checkbox' %>
和
<%= f.text_field :currency_code, id: 'currency_code' %>
jQuery 片段
curreny_checkbox = $('#curreny_checkbox')
currency_code = $('#currency_code')
$(currency_checkbox).on('change', function(){
if(this.checked)
currency_code.val('2')
else
currency_code.val('')
})
在您的控制器中,您可以简单地分配值
def create
// other codes //
@obj.currency_code = params[:currency_code]
end
推荐阅读
- c++ - 如何创建指向数组的指针并提供访问它的方法?
- amazon-web-services - AWS Amplify 构建错误:“SSR 应用程序不支持基本身份验证。”
- javascript - 如何修改此 LP 求解器的约束以检查推荐配置是否有效?
- python - 是否可以将 3D 图表从 MatPlotLib 导出到 TikZ?
- flowtype - 如何使这两种类型定义完全相同?
- glsl - 你如何画一个sampler2D?
- c# - C# 有没有办法为通用 T SQLiteConnection 表填充变量
? - ssl - Java 7/Tomcat 7 中的 TLS v1.3 支持
- docker - 如何在以 Podman 作为容器引擎的 Ubuntu 系统中运行 Docker Compose 文件
- html - 表单发布请求未返回必要的信息