首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在控制器中访问块中的模型变量

在控制器中访问块中的模型变量
EN

Stack Overflow用户
提问于 2014-02-14 10:01:13
回答 2查看 93关注 0票数 0

我一定是错过了一些非常明显的东西,但我现在看不到树木的木材,这感觉很像一个菜鸟的问题!)

我有一个模型HousePrice,有两个属性,邮政编码和价格。

邮政编码目前是一个字符串,包括开头的一些地址,然后是一个或更多的邮政编码。例如..。

代码语言:javascript
复制
postcodes = "High Street, Tetsworth, Thame, OX9 OX9 7AB OX9 7AD OX9 7AE OX9 7AS OX9 7AT        OX9 7BS OX9 7BZ"

我有一个红宝石脚本,它剥离了我不想要的文本,并且只将邮政编码作为数组返回。它可能不是最好的,但它做的工作!

我的HousePrices控制器中有一个定制的def,它是从索引页的链接中调用的。然而,我一直

代码语言:javascript
复制
undefined method `slice!' for nil:NilClass

我很困惑!

这是我正在尝试的..。

代码语言:javascript
复制
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中,如果给它字符串,它就会起作用,但如果它从数据库中获得字符串,则不会工作。我知道我错过了一些愚蠢的事情,但我在挣扎!

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-14 10:23:56

让我们仔细看看代码。错误发生在这里:

代码语言:javascript
复制
@array = pca.split(',').to_a
@srt = @array[3]
@srt.slice!(0,5)

看起来您的@srt变量是nil,也就是说没有设置为任何东西。我敢打赌,这是因为@array变量没有第四个元素(从0开始,@array[3]返回第四个元素)。

您需要做的是使用某种调试器并将其直接挂钩到进程中。这里有一个关于调试Rails应用程序的指南链接。

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2014-02-16 10:41:29

你已经找到解决问题的办法了吗?

关于你问题的题目,似乎一切都是正确的。

正如BroiSatse和marvelousNinja所指出的,尝试调试整个算法中的问题。

我试图重新创建手头的问题,在我的例子中,如果BroiSatses评论,我们正在讨论的代码片段是有效的。

很可能你想要pca.postcodes.split..。

和marvelousNinjas评论

我敢打赌,这是因为@array变量没有第四个元素(从0开始,@array 3返回第四个元素)

都被照顾好了。

这也是实践最佳实践、tdd和重构的一个很好的例子。我使用rspec和PORO(普通的老红宝石对象)只是为了专注于发布的算法。

代码语言:javascript
复制
  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 end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21776173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档