Rails表单插值实现咨询:如何将字段值带引号存入SQL
解决Rails表单值插值存入带双引号格式的问题
嘿,这个需求其实很好实现,而且咱们得遵循Rails的最佳实践,把业务逻辑放在模型层会更靠谱。下面给你两种可行的方案,优先推荐第一种:
方案1:模型层自定义Setter方法(推荐)
这是最优雅的方式,不管是从表单提交还是其他地方给filename赋值,都会自动处理成带双引号的格式,还能避免重复代码。
假设你的模型叫StaticFile(换成你实际的模型名就行),在模型文件里添加这段代码:
# app/models/static_file.rb class StaticFile < ApplicationRecord # 自定义filename的赋值方法 def filename=(value) # 先判断值是否存在,且还没被加上双引号,避免重复嵌套 quoted_value = if value.present? && !value.start_with?('"') && !value.end_with?('"') "\"#{value}\"" else value end # 调用父类的setter方法,把处理后的值存进去 super(quoted_value) end end
这样一来,当你在表单里输入orders,提交后就会自动变成"orders"存入数据库;如果用户已经输入了带引号的内容(比如"products"),也不会重复添加引号,避免出现""products""的情况。
方案2:控制器层处理(不推荐,但应急可用)
如果暂时不想改动模型,也可以在控制器的create或update动作里处理,但这种方式的缺点是逻辑分散,其他地方赋值时还要重复写处理代码。
示例代码如下:
# app/controllers/static_files_controller.rb class StaticFilesController < ApplicationController def create @static_file = StaticFile.new(static_file_params) # 处理filename的值 if @static_file.filename.present? && !@static_file.filename.start_with?('"') && !@static_file.filename.end_with?('"') @static_file.filename = "\"#{@static_file.filename}\"" end if @static_file.save redirect_to @static_file, notice: 'Static file was successfully created.' else render :new end end private def static_file_params params.require(:static_file).permit(:filename) # 加上你的其他参数 end end
额外提示:表单显示的处理
如果希望用户在编辑表单时看到带引号的值,只要模型层处理过,表单的text_field会自动显示处理后的值,不需要额外修改你的原有表单代码。
内容的提问来源于stack exchange,提问作者Menporul Poriyalan
相关产品推荐
相关产品推荐

