Rails中能否将模型save方法内的变量传递到controller控制器中
问题解答
完全可以实现。你在模型自定义save方法中定义的是实例变量,该变量会绑定在你初始化的@t_stocks_import实例对象上,save方法执行完成后控制器可以直接读取该值。
推荐实现方式(符合规范)
在TStocksImport模型中添加属性读取器,遵循Ruby封装规范,调用更便捷:
# 在 TStocksImport 模型顶部添加此行 attr_reader :variable
之后控制器中调用save方法后,直接读取实例的variable属性即可:
def create @t_stocks_import = TStocksImport.new(params[:t_stocks_import]) if @t_stocks_import.save # 保存成功场景读取变量 variable_val = @t_stocks_import.variable # 此处可添加你需要的业务处理逻辑 redirect_to stocks_path else # 保存失败场景也可正常读取,你的赋值逻辑在save方法第一行执行,两个分支都会触发 variable_val = @t_stocks_import.variable redirect_to stocks_path end end
快速实现方式(不推荐生产环境使用)
如果不想修改模型代码,也可以直接通过读取实例变量的原生方法获取值:
# save方法执行后调用即可 variable_val = @t_stocks_import.instance_variable_get(:@variable)
注意事项
你当前的代码将@variable赋值放在了save方法的第一行,无论走保存成功还是失败的分支都会执行赋值逻辑,所以两个分支都能正常读到值。如果后续调整赋值逻辑的位置,请确保赋值代码在方法返回之前执行。
内容的提问来源于stack exchange,提问作者Ing.LuisC
相关产品推荐
相关产品推荐

