【问题标题】:Ruby on rails send function bug?Ruby on rails 发送函数错误?
【发布时间】:2015-05-23 22:43:54
【问题描述】:

发生了很奇怪的事情,我做一个循环来改变一个html并且需要改变一个叫做product01的变量,代码:

(10..34).each do |i|      
      li = @doc.css('li')[i-1]
      li.content = @site.send("product0#{i-9}")
end

在上面的代码中,错误提示:undefined method `product010' for...

然后我只是删除了0:

(10..34).each do |i|      
      li = @doc.css('li')[i-1]
      li.content = @site.send("product#{i-9}")      
end

现在错误显示:未定义方法 `product1' for...

我已经试过了

@site.send("product"+"0"+"#{i-9}")>product010

@site.send("product0".to_s+"#{i-9}")>product010

@site.send("product"+"0#{i-9}" > product010

所以,我只想要 product01。

为了让事情更清楚,我使用 nokogiri 打开一个 html 并通过 db 更改值,进入 db 的变量称为 product01、product02 等。

我可以说@site.product01,但是产品很多,所以我想一个一个地做一个循环。

它不是一系列产品,每个产品都来自一个@site。

是的,它在 |i| 时起作用高于 10 但不是从 0 到 9,因为我需要输入 0。

@doc = Nokogiri::HTML(open("/home/file.html")

为了让它工作我删除所有名为 01,02..09 的变量,如果它不起作用,将它们的名称更改为 1,2,..9。

谢谢。

【问题讨论】:

  • 你能解释一下你想要做什么吗?例如什么是@doc,什么是@site,等等?为什么你不能直接说@site.product01 而不是随便发送?
  • 你说@site.send("product#{i}")有效吗?我将在该循环内从 10 到 34,给你product10product11....product34。不过,这感觉像是一个简单问题的可怕解决方案。我希望只有一个产品数组并遍历数组,而不是访问不同方法的负载。
  • 为什么要循环播放 10..34?你为什么不只取数组或元素的长度呢?
  • 刚刚更新了问题,谢谢大家。

标签: ruby-on-rails loops send


【解决方案1】:

我不确定您为什么要 product01 到 product34,这看起来不对。

是否可以将其构造为“产品”数组?那会更标准。

但是,您可以将数字格式化为给定位数...

irb> '%02d' % 6
=> "06"

这似乎可以解决问题。

(取自How to make single digit number a two digit number in ruby?

【讨论】:

  • 当然,它看起来不对,我会制作 1,2,3.. 而不是 01,02,03...谢谢
  • 我不确定你是否理解这个问题。 productXX 方法/变量的来源是什么?这是从哪里来的? - 当您有不同数量的产品的不同站点时,此代码似乎会崩溃。
  • 产品的数量总是从1到20,它的一个站点和人们可以添加1到20个产品。架构中 productXX 的来源看起来像 :site, :productXX, :string 我已经从 product1 声明到 product20。
  • 在将 01 更改为 1 并使用 @site.send("produto#{i-8}") 后我仍然遇到问题
  • 这很不寻常。更标准的方法是拥有一个 Product 模型(即使它在表中只有一个字符串和一个 site_id)并将has_many :products 放入您的 Site 模型中。这意味着它将更好地处理不同数量的产品。
猜你喜欢
  • 1970-01-01
  • 2013-04-09
  • 2012-07-21
  • 2017-06-15
  • 2014-04-17
  • 2016-06-18
  • 1970-01-01
  • 2010-12-15
  • 2011-03-17
相关资源
最近更新 更多