小编Jas*_*ump的帖子

rails在保存之前删除非数字值

我已经搜索了,看起来这应该很简单,但我无法让它工作.我想在保存电话号码之前删除所有非数字字符.这就是我目前所拥有的:

before_save { |workorder| workorder.phonenumber = 
                  phonenumber.to_s.gsub(/\D/, '').to_i }
Run Code Online (Sandbox Code Playgroud)

因此,如果用户输入

925-555-5555
Run Code Online (Sandbox Code Playgroud)

它应该保存9255555555,但它实际上只保存了925并且忽略了之后的所有内容

我也尝试过:

before_save { |workorder| workorder.phonenumber = 
                  phonenumber.to_s.gsub(/[^0-9]/, "").to_i }
Run Code Online (Sandbox Code Playgroud)

结果相同.

解决了:

def raw_phonenumber
  self.phonenumber
end
def raw_phonenumber=(s)
  self.phonenumber=s.gsub(/\D/, '')
end
Run Code Online (Sandbox Code Playgroud)

ruby regex ruby-on-rails-3

29
推荐指数
2
解决办法
2万
查看次数

Rails 3:检索父模型属性等于搜索关键字的所有子记录

我想做一个查询,只返回没有序列号的资产,其中workorder分支等于一个数字.

class Workorder < ActiveRecord::Base
    belongs_to :user
    has_many :assets

    scope :current_branch, where("branch=350").order("wo_date ASC")
end

class Asset < ActiveRecord::Base
    belongs_to :workorder

    scope :needs_serial, :conditions =>  {:serial => ""}
end

class AssetsController < ApplicationController
    def index
        @assets_needing_serial=???
    end
end
Run Code Online (Sandbox Code Playgroud)

所以我想要一个哈希:资产,其中assets.workorder.branch ="350".我想我可以做一个循环并以这种方式创建哈希,但我应该能够在查询中执行此操作吗?我应该尝试使用范围吗?

**更新

这就是我最终使用的.工作得很好.

@assets = Asset.joins(:workorder).where('workorders.branch=350').order('workorders.wo_date ASC')
Run Code Online (Sandbox Code Playgroud)

scope ruby-on-rails ruby-on-rails-3

9
推荐指数
1
解决办法
7030
查看次数

重构一个ruby方法

我似乎用以下模式编写了很多方法,似乎应该有更好的方法.这个或更好的做法是否有单线程?

def combine_roster(roster)
  rstr = []
  roster.each do |r|
    rstr << r.user
  end
  rstr
end
Run Code Online (Sandbox Code Playgroud)

ruby methods refactoring ruby-on-rails

0
推荐指数
1
解决办法
92
查看次数