Ruby On Rails - 在控制器中使用关注点

Noa*_*ert 7 ruby ruby-on-rails separation-of-concerns web

可能的Noob警告: RoR的新功能

我试图在RoR中使用关注点.现在我只是写了一个非常简单的问题

#./app/controllers/concerns/foo.rb
module Foo
  extend ActiveSupport::Concern

  def somethingfoo
    puts "Ayyyy! Foo"
  end
end
Run Code Online (Sandbox Code Playgroud)

当我尝试在我的控制器中使用此问题时,我得到一个未定义的方法错误

#./app/controllers/foo_controller.rb
class FooController < ApplicationController

  include Foo

  def show
    Foo.somethingfoo # undefined method 'somethingfoo' for Foo:Module
    render plain: "Ohh no, It doesnt even show me because of the error above me"
  end
end
Run Code Online (Sandbox Code Playgroud)

据我所知somethingfoo应该被召唤但事实并非如此.我也试过somethingfoo在一个included do ... end块中定义关注但是这也不起作用.


有什么我想念的吗?控制器可以不用这样的问题吗?

DMK*_*MKE 15

如果包含模块(扩展ActiveSupport::Concern或不扩展),则该模块的方法将成为包含类/模块的实例方法.

因此,您的Controller方法应该读取

def show
  somethingfoo
  render plain: "Yeah, I'm shown!"
end
Run Code Online (Sandbox Code Playgroud)