我开始解析数据并从用户提供的字符串中获取一些结构(主要是提取数字和城市名称)。
我在ruby解释器中运行了一些代码,现在我想在Web应用程序中使用相同的代码。
我正在努力解决代码中我应该解析的位置,或者它是如何构造的。
我最初的直觉是它属于模型,因为它是数据逻辑。例如,条目是否有整数,是否有两个整数,是否有城市名称等等。
但是,我的模型需要继承ActiveRecord和Parslet(用于解析),Ruby显然不允许多重继承。
我目前的型号看起来像这样
#concert model require 'parslet' class concert < Parlset::Parser attr_accessible :date, :time, :city_id, :band_id, :original_string rule(:integer) {match('[0-9]').repeat(1)} root(:integer) end
真的不多,但我觉得我被卡住了,因为我的结构错了,不知道如何连接这两个部分。
我正在尝试存储原始字符串以及已解析数据的组件。
答案 0 :(得分: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
答案 1 :(得分:1)
在我看来,好像你需要几个解析器(一个用于城市名称,一个用于数字)。我建议你为这样的解析器创建一个非正式的接口,比如
class Parser
def parse(str) # returning result
end
end
然后你将创建几个Ruby类,每个类在./lib。
中执行解析任务然后在模型中,你需要所有这些ruby类,并将它们放到任务中,比如在before_save钩子中等等。
作为parslet的作者,我可能会补充说,解析数字或城市名称可能不是解析的最佳位置。可能想在那里考虑正则表达式。