12

Possible Noob Warning: New to RoR

I am trying to use concerns in RoR. Right now I just have a very simple concern writen

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

  def somethingfoo
    puts "Ayyyy! Foo"
  end
end

When I try and use this concern in my controller I get a undefined method error

#./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

To my knowledge somethingfoo should be called but it is not. I have also tried defining somethingfoo in a included do ... end block in the concern but this does not work either.


Is there something I am missing? Can concerns not be used like this with controllers?

Arturo Herrero
  • 12,772
  • 11
  • 42
  • 73
Noah Huppert
  • 4,028
  • 6
  • 36
  • 58
  • Why are you trying to call anything on `Foo`? http://stackoverflow.com/a/15078070/438992, http://blog.andywaite.com/2012/12/23/exploring-concerns-for-rails-4/, etc. – Dave Newton Jun 24 '14 at 19:16

1 Answers1

22

If you include modules (extended by ActiveSupport::Concern or not), the methods of that module become instance methods of the including class/module.

Your Controller method should hence read

def show
  somethingfoo
  render plain: "Yeah, I'm shown!"
end
Arturo Herrero
  • 12,772
  • 11
  • 42
  • 73
DMKE
  • 4,553
  • 1
  • 31
  • 50