填充轨道与解析数据形成

时间:2012-05-14 20:59:02

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我在我的lib中设置了一个nokogiri脚本作为模块。我的产品表单中还有一个字段,它获取一个URL并将其传递给nokogiri脚本。如何使用nokogiri模块解析的数据填写表单字段。基本上我希望表单填充解析数据,以便用户只需查看并向db添加产品。

我的模块:

    module product
   def get_product
        url = ""
        product_page = Nokogiri::HTML(open(url))
        image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
          title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
        description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
        curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
        base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]      
        wm_item_num = url.split("/").last
        id_str = "walmart_#{wm_item_num}"

      end
    end

1 个答案:

答案 0 :(得分:0)

请原谅我的语法,我认为解决问题的方法就是这个,

 ====================================Module================================            
        module product
                   def get_product(product)
                        product_page = Nokogiri::HTML(open(product.url))
                        product.image_url = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div/div/div/div').children[3].attributes['href'].text
                        product.title_text = product_page.at_xpath('/html/body/div/div[2]/div[4]/div[4]/div[2]/div[2]/div/form/div/h1').text
                        product.description = product_page.at_xpath('//*[(@id = "SITCC_1column")]//*[contains(concat( " ", @class, " " ), concat( " ", "ItemSectionContent", " " ))]').text.strip!
                        product.curr_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "camelPrice", " " ))]').text[/[0-9\.]+/]
                        product.base_item_price = product_page.at_xpath('//*[(@id = "WM_PRICE")]//*[contains(concat( " ", @class, " " ), concat( " ", "SubmapPrice", " " ))]').text[/[0-9\.]+/]      
                        product.wm_item_num = url.split("/").last
                        product.id_str = "walmart_#{wm_item_num}"

                        product # returning product after parsing the url and setting other fields.

                      end
                    end

    ====================================View================================


                <%= form_tag url_for(:controller => 'products', :action => 'parse_url') do  %>

                   <p>
                    <%= label_tag :enter_url %> :<br />
                    <%= text_field_tag :url %>
                  </p>   

                  <p class="button"><%= submit_tag "Parse"  %></p>

    ====================================Controller================================

            class ProductsController < ApplicationController
             include MyModule #if your file name is my_module.rb in /lib folder.

              def parse_url
                @product = Product.new
                @product = get_product(@product)
                render ('products/new')
              end

              def create

                @product = Product.new(params[:products]) # the usual way

                if @product.save
                else
                end

              end

            end

    ====================================View================================

                <%= form_for @product, :url => {:controller => 'products', :action => 'create'} do |f| %>

                <p>
                    <%= f.label :image_url %> : <%= f.text_field :image_url %>
                </p>
                <p>
                    <%= f.label :title_text %> : <%= f.text_field :title_text %>
                </p>
                <p>
                    <%= f.label :description %> : <%= f.text_field :description %>
                </p>
                .
                .
                .
                .
                <p class="button"><%= f.submit "Create this product"  %></p>

    ====================================The End================================


Thanks.