2011-07-11 8 views
2

私は、データの解析とユーザーが指定した文字列からの構造の取得を開始しています(主に数字と都市名の引き出し)。MVCに保存する前に解析する

私はRubyインタプリタで少しのコードを実行しましたが、今では同じコードをWebアプリケーションで使用したいと考えています。

私の解析がどこにあるべきか、あるいはどのように構造化されているのかについては苦労しています。

私の最初の本能は、それがデータロジックであるため、モデルに属していたということでした。たとえば、エントリには整数がありますか、2つの整数がありますか、都市名などありますか?

しかし、私のモデルは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 

のように探していますが、私は構造が間違っているんだとこの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 
+0

私が探していることはやややりそうですが、私は確かではありません。私はそれが1つの解決策であり、唯一の答えだと思うので、私はそれに付随します。 – pedalpete

1

あなたは、いくつかのパーサ(都市名に対して1つの数字に1つ)を必要とするかのようにそれは私には見えます。私はあなたが次にあなたは、それぞれが./libで解析作業を行い、いくつかのRubyのクラスを作成することになり、このような

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

ようなパーサのための非公式なインターフェイスを作成することをお勧めします。

モデルでは、これらのルビクラスをすべて必要とし、それをタスクに入れて、before_saveフックなどで言うことができます。

parsletの作成者として、私は、解析用の数字や都市名がおそらくパースレットのスイートスポットではないと付け加えています。そこに正規表現があると思うかもしれません。

関連する問題