ruby-on-rails - Rails 在控制器中扩展模块
问题描述
我正在尝试编写一个模块,我想用我在控制器中的操作替换该模块。为此,我在我的控制器文件夹中创建了一个名为 test 的模块。我想把我的动作我的控制器动作代码是:
def test
rain_fall_type = "test"
year = ""
compare = params[:compare]
respond_to do |format|
format.html { render json: rain_fall_type }
end
end
我想将此代码放入我的模块代码中我已将此代码添加到我的模块中,其代码为:
module Test
def test
rain_fall_type = "params[:rain_fall_type]
views = params[:views]"
year = ""
compare = params[:compare]
respond_to do |format|
format.html { render json: rain_fall_type }
end
end
end
我正在尝试将其扩展到我的控制器中,因此我将扩展测试放入我的控制器中,但出现此错误:
The action 'test' could not be found for ProductionProductivity7sController
当我从模块中删除 def test 并将此代码放入控制器时,如下所示:
def test
extend Test
end
我从模块中删除了 def test 并将其更改为:
module Test
rain_fall_type = "params[:rain_fall_type]
views = params[:views]"
year = ""
compare = params[:compare]
respond_to do |format|
format.html { render json: rain_fall_type }
end
end
当我这样做时,我收到此错误:
undefined local variable or method `params' for Test:Module
我应该怎么做才能将我的测试操作替换到我的模块中。
解决方案
这是一个很好的任务concerns
,这里有一个例子:
你的控制器代码:
class ProductionProductivity7sController < ApplicationController
include Concerns::MyAwesomeModule
end
您的模块放置在app/controllers/concerns/my_awesome_module.rb
:
module Concerns
module MyAwesomeModule
extend ActiveSupport::Concern
included do
# here you can use controller level methods
# like `before_action`
end
def the_action_name
# your logic goes here
# you can use all variables from original controller
# for e.g. `params`, `render` and so on.
end
end
end
推荐阅读
- html - 拉出占位符的一部分并放置在移动输入字段上方
- html - 如何“对齐”3 个响应式水平 DIV?
- angular - 在 Angular [Angular 10] 中为验证器使用全局变量
- angular - 如何销毁“动态 lightgallery”实例,以使其参考都不会出现在另一个角度组件上
- python - SHAP ValueError:两个形状中的维度 1 必须相等,但为 2 和 1。形状为 [?,2] 和 [?,1]
- oracle - 为什么我在创建触发器时不断收到此错误?
- php - 如何使用 PHP 从字符串中删除除最后一个单词之外的所有单词?
- javascript - 开玩笑 TypeError 不是一个函数
- r - 在摆脱多余工作表的同时绑定 XLS 文件
- macos - Mac Rspec 安装失败:-bash: rspec: command not found