加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 定义Rails帮助程序(或非帮助程序)函数,以便在

发布时间:2020-12-17 03:03:32 所属栏目:百科 来源:网络整理
导读:我有一个功能,这样做: def blank_to_negative(value) value.is_number? ? value : -1 end 如果传递的值不是数字,则将值转换为-1. 我主要为某个模型创建了这个函数,但是在任何特定的模型中定义这个函数似乎都不合适,因为这个函数的应用范围显然可以超出任何
我有一个功能,这样做:

def blank_to_negative(value)
    value.is_number? ? value : -1
  end

如果传递的值不是数字,则将值转换为-1.

我主要为某个模型创建了这个函数,但是在任何特定的模型中定义这个函数似乎都不合适,因为这个函数的应用范围显然可以超出任何一个特定的模型.我几乎肯定需要在其他模型中使用此功能,并且可能在视图中.

什么是最“Rails方式”的方式来定义这个功能,然后在任何地方使用它,特别是在模型中?

我试图在ApplicationHelper中定义它,但它不起作用:

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

那告诉我

undefined method `blank_to_negative’ for #

无论如何,我已经阅读了you’re “never” supposed to do that kind of thing,所以我有点困惑.

解决方法

如果你想在你的项目的每个类中都有这样一个帮助方法,那么你可以自由地将它作为一个方法添加到Object或你看到的任何东西:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读