2

我开始解析数据并从用户提供的字符串中获取一些结构(主要是提取数字和城市名称)。

我在 ruby​​ 解释器中运行了一些代码,现在我想在 Web 应用程序中使用相同的代码。

我正在为我的解析应该在代码中的哪个位置或它的结构而苦苦挣扎。

我最初的直觉是它属于模型,因为它是数据逻辑。例如,条目是否有整数,是否有两个整数,是否有城市名称等。

但是,我的模型需要同时继承 ActiveRecord 和 Parslet(用于解析),而 Ruby 显然不允许多重继承。

我目前的模型看起来像这样

#音乐会模型
需要'欧芹'
课堂音乐会 < Parlset::Parser
  attr_accessible :date, :time, :city_id, :band_id, :original_string

   rule(:integer) {match('[0-9]').repeat(1)}
   根(:整数)
结尾

那里真的不多,但我认为我被卡住了,因为我的结构错误并且不知道如何连接这两部分。

我正在尝试存储原始字符串以及解析数据的组件。

4

2 回答 2

1

我想你想要的是:

#concert model
require 'parslet'
class concert < ActiveRecord::Base
  before_save :parse_fields
  attr_accessible :date, :time, :city_id, :band_id, :original_string


   rule(:integer) {match('[0-9]').repeat(1)}
   root(:integer)

  private
  def parse_fields
    date = Parlset::Parser.method_on_original_string_to_extract_date
    time = Parlset::Parser.method_on_original_string_to_extract_time
    city_id = Parlset::Parser.method_on_original_string_to_extract_city_id
    band_id = Parlset::Parser.method_on_original_string_to_extract_band_id
  end
end
于 2011-07-11T18:33:55.663 回答
1

在我看来,好像您需要几个解析器(一个用于城市名称,一个用于数字)。我建议您为此类解析器创建一个非正式接口,例如

class Parser
  def parse(str) # returning result
  end 
end

然后,您将创建几个 Ruby 类,每个类在 ./lib 中执行解析任务。

然后在模型中,您需要所有这些 ruby​​ 类,并将它们放到任务中,比如说在 before_save 钩子等中。

作为 parslet 的作者,我可能会补充一点,解析数字或城市名称可能不是 parslet 的最佳选择。可能想在那里考虑正则表达式。

于 2011-09-27T13:53:08.983 回答