我一定是错过了一些非常明显的东西,但我现在看不到树木的木材,这感觉很像一个菜鸟的问题!)
我有一个模型HousePrice,有两个属性,邮政编码和价格。
邮政编码目前是一个字符串,包括开头的一些地址,然后是一个或更多的邮政编码。例如..。
postcodes = "High Street, Tetsworth, Thame, OX9 OX9 7AB OX9 7AD OX9 7AE OX9 7AS OX9 7AT OX9 7BS OX9 7BZ"我有一个红宝石脚本,它剥离了我不想要的文本,并且只将邮政编码作为数组返回。它可能不是最好的,但它做的工作!
我的HousePrices控制器中有一个定制的def,它是从索引页的链接中调用的。然而,我一直
undefined method `slice!' for nil:NilClass我很困惑!
这是我正在尝试的..。
def second_distance_run
HousePrice.all.each do |pca|
@postc = []
@array = pca.split(',').to_a
@srt = @array[3]
@srt.slice!(0,5)
aa = @srt.split(' ').to_a
aa.each_slice(2) do |elem|
@postc << (elem[0].to_s) + (elem[1].to_s)
end
end在consol中,如果给它字符串,它就会起作用,但如果它从数据库中获得字符串,则不会工作。我知道我错过了一些愚蠢的事情,但我在挣扎!
提前感谢!
发布于 2014-02-14 10:23:56
让我们仔细看看代码。错误发生在这里:
@array = pca.split(',').to_a
@srt = @array[3]
@srt.slice!(0,5)看起来您的@srt变量是nil,也就是说没有设置为任何东西。我敢打赌,这是因为@array变量没有第四个元素(从0开始,@array[3]返回第四个元素)。
您需要做的是使用某种调试器并将其直接挂钩到进程中。这里有一个关于调试Rails应用程序的指南链接。
祝好运!
发布于 2014-02-16 10:41:29
你已经找到解决问题的办法了吗?
关于你问题的题目,似乎一切都是正确的。
正如BroiSatse和marvelousNinja所指出的,尝试调试整个算法中的问题。
我试图重新创建手头的问题,在我的例子中,如果BroiSatses评论,我们正在讨论的代码片段是有效的。
很可能你想要pca.postcodes.split..。
和marvelousNinjas评论
我敢打赌,这是因为@array变量没有第四个元素(从0开始,@array 3返回第四个元素)
都被照顾好了。
这也是实践最佳实践、tdd和重构的一个很好的例子。我使用rspec和PORO(普通的老红宝石对象)只是为了专注于发布的算法。
3 class HousePrice# < ActiveRecord::Base
4
5 attr_accessor :postc, :postcodes
6
7 def initialize
8 self.postc = []
9 self.postcodes = "High Street, Tetsworth, Thame, OX9 OX9 7AB OX9 7AD OX9 7AE OX9 7AS OX9 7AT OX9 7BS OX9 7BZ"
10 end
11
12 def self.all
13 [ HousePrice.new ]
14 end
15
16 def second_distance_run
17 HousePrice.all.each do |pca|
18 array = pca.postcodes.split(',')
19 srt = array[3]
20 srt.slice!(0,5)
21 aa = srt.split(' ')
22 aa.each_slice(2) do |elem|
23 postc << (elem[0]) + (elem[1])
24 end
25 end
26 end
27
28 end
29
30 describe HousePrice do
31
32 describe '#postcodes' do
33 it 'returns a string that includes several postcodes' do
34 house_price = HousePrice.new
35 expect(house_price.postcodes).not_to be_nil
36 end
37 end
38
39 describe '#second_distance_run' do
40 it 'sets the postcodes' do
41 house_price = HousePrice.new
42 house_price.second_distance_run
43 expect(house_price.postc).to eq ["OX97AB", "OX97AD", "OX97AE", "OX97AS", "OX97AT", "OX97BS", "OX97BZ"]
44 end
45 end
46 endhttps://stackoverflow.com/questions/21776173
复制相似问题