Tag: 重构

如何编写跨越模型,控制器和视图的Rails mixin

为了减少我的小Rails应用程序中的代码重复,我一直在努力将我的模型之间的公共代码添加到它自己的独立模块中,到目前为止一直很好。 模型的东西相当简单,我只需要在开头包含模块,例如: class Iso < Sale include Shared::TracksSerialNumberExtension include Shared::OrderLines extend Shared::Filtered include Sendable::Model validates_presence_of :customer validates_associated :lines owned_by :customer def initialize( params = nil ) super self.created_at ||= Time.now.to_date end def after_initialize end order_lines :despatched # tracks_serial_numbers :items sendable :customer def created_at=( date ) write_attribute( :created_at, Chronic.parse( date ) ) end end 这工作正常,但是,现在,我将要有一些控制器和视图代码,这些代码在这些模型之间也是常见的,到目前为止,我有这个用于我的可发送内容: # […]

帮助重构这个令人讨厌的Ruby if / else语句

所以我有一个很大的毛茸茸的if / else语句。 我将跟踪号码传递给它,然后确定它是什么类型的跟踪号码。 我怎样才能简化这件事? 特别想减少代码行数。 if num_length < 8 tracking_service = false else if number[1, 1] == 'Z' tracking_service = 'ups' elsif number[0, 1] == 'Q' tracking_service = 'dhl' elsif number[0, 2] == '96' && num_length == 22 tracking_service = 'fedex' elsif number[0, 1] == 'H' && num_length == 11 tracking_service = 'ups' elsif […]

拆分seeds.rb文件

我的seeds.rb文件变得非常大。 重构文件中数据的最佳方法是什么? 我可以将数据放入各种文件中并在seeds.rb文件中require它们吗?

是否可以在类构造函数中使用参数?

我正在写一个rubygem,它对于计算文本中的单词出现很有用,我选择在类构造函数中放入3个参数。 代码正在运行,但我想重构它以获得好处。 根据您的经验,更容易阅读/保护/使用API​​作为一个类,其中包含没有参数和许多setter / getters方法的构造函数或类似这样的代码,构造函数中包含所有参数? TIA 保罗 def initialize(filename, words, hide_list) if ! filename.nil? @filename = filename @occurrences = read else @filename = STDIN @occurrences = feed end @hide_list = hide_list @sorted = Array(occurrences).sort { |one, two| -(one[1] two[1]) } @words = words end

类似Rails的数据库迁移?

是否有任何易于安装/使用(在unix上)的数据库迁移工具,如Rails迁移? 我真的很喜欢这个想法,但是纯粹安装ruby / rails来管理我的数据库迁移似乎有些过分。

寻找完全平方算法的优化

我正在研究的问题是: 在给定特定范围的情况下,找出哪个平方因子总和是一个完美的平方。 因此,如果范围为(1..10),您将得到每个数字的因子(所有因子为1,所有因子为2,所有因子为3等)。将这些因子平方,然后将它们加在一起。 最后检查这笔金额是否是一个完美的正方形。 我坚持重构/优化,因为我的解决方案太慢了。 这是我想出的: def list_squared(m, n) ans = [] range = (m..n) range.each do |i| factors = (1..i).select { |j| i % j == 0 } squares = factors.map { |k| k ** 2 } sum = squares.inject { |sum,x| sum + x } if sum == Math.sqrt(sum).floor ** 2 all = […]