Rails 在控制器中扩展模块
Posted
技术标签:
【中文标题】Rails 在控制器中扩展模块【英文标题】:Rails extend Module in controller 【发布时间】:2018-12-16 06:20:23 【问题描述】:我正在尝试编写一个模块,我想用我在控制器中的操作替换该模块。为此,我在我的控制器文件夹中创建了一个名为 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
我应该怎么做才能将我的测试操作替换到我的模块中。
【问题讨论】:
【参考方案1】:这是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
【讨论】:
我收到此错误无法加载此类文件 -- /home/nilay/rail/rails-backend/app/controllers/my_awesome_module.rb 它对我有用,你做错了什么,仔细检查你的代码。 我将 my_awesome_module.rb 添加到我的控制器/关注文件夹中我还需要什么 可能会有很多问题,从代码中的拼写错误到文件名错误,在这种情况下我帮不了你,我使用上面的代码,它就像一个魅力。 你的答案是错误的编辑你的答案我修改了你的代码看看它是有效的。 gist.github.com/nwoow/1302dd43b5263d30dda42fc77755a5f0以上是关于Rails 在控制器中扩展模块的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Rails 中正确使用控制器辅助模块,以及如何连接这些辅助模块?