Defining a Rails helper (or non-helper) function for use everywhere, including models

ruby-on-rails

Solution

if you want to have such a helper method in every class in your project, than you are free to add this as a method to `Object` or whatever you see fits:

module MyApp
  module CoreExtensions
    module Object
      def blank_to_negative
        self.is_number? ? self : -1
      end
    end
  end
end

Object.send :include, MyApp::CoreExtensions::Object

Problem

I have a function that does this: ``` def blank_to_negative(value) value.is_number? ? value : -1 end ``` If the value passed is not a number, it converts the value to -1. I mainly created this function for a certain model, but it doesn't seem appropriate to define this function in any certain model because the scope of applications of this function could obviously extend beyond any one particular model. I'll almost certainly need this function in other models, and probably in views. What's the most "Rails Way" way to define this function and then use it everywhere, especially in models? I tried to define it in `ApplicationHelper`, but it didn't work: ``` class UserSkill < ActiveRecord::Base include ApplicationHelper belongs_to :user belongs_to :skill def self.splice_levels(current_proficiency_levels, interest_levels) Skill.all.reject { |skill| !current_proficiency_levels[skill.id.to_s].is_number? and !interest_levels[skill.id.to_s].is_number? }.collect { |skill| { :skill_id => skill.id, :current_proficiency_level => blank_to_negative(current_proficiency_levels[skill.id.to_s]), :interest_level => blank_to_negative(interest_levels[skill.id.to_s]) }} end end ``` That told me undefined method `blank_to_negative' for # I've read that you're "never" supposed to do that kind of thing, anyway, so I'm kind of confused.

Original source

Related problems