2013-05-29 58 views
1

我想創建一個提交按鈕,它將調用一個ruby腳本並執行它(腳本需要一個isbn並且ping一個第三方網站並根據輸入返回信息)。具體來說,我有一個用於創建新書的表單,我需要的用戶主要是isbn。提交後,我想採用這個isbn並運行我的ruby腳本來檢索數據並在下一頁顯示。我已經嘗試將.rb代碼轉換爲幫助程序方法,但我不確定是否正確執行此操作,但我不知道如何更改提交按鈕的功能以執行方法或腳本 這是我的輔助方法有一個提交按鈕使用表單中的字段運行.rb文件(ruby on rails)

module PagesHelper 
require 'httpclient' 
require 'nokogiri' 
def search(hash) 

#class SearchBook 

#def initialize(isbn) 
# @isbn = isbn 
#end 


#puts "Enter ISBN: " 
#isbn = gets.chomp 
#def run 
isbn = hash 

conditions = ['Acceptable', 'BrandNew', 'Good', 'LikeNew', 'VeryGood'] 
client = HTTPClient.new 
uri = 'https://svcs.ebay.com/services/half/HalfFindingService/v1?OPERATION- NAME=findHalfItems&REST-PAYLOAD' 

count=0 
conditions.each do |condition| 

query = { 
     'X-EBAY-SOA-SERVICE-NAME' => 'HalfFindingService', 
     'SERVICE-VERSION' => '1.0.0', 
     'GLOBAL-ID' => 'EBAY-US', 
     'X-EBAY-SOA-SECURITY-APPNAME' => 'Compassi-3b25-406b-b3d6-d69ca7353053', 
     'RESPONSE-DATA-FORMAT' => 'XML', 
     'productID' => isbn, 
     '[email protected]' => 'ISBN', 
     'itemFilter' => 'Condition', 
     'itemFilter.name' => 'Condition', 
     'itemFilter.value' => condition, 
     'paginationInput.entriesPerPage' => '3', 
     'sortBy' => 'FixedPrice', 
     'sortBy.sortOn' => 'FixedPrice', 
     'sortBy.sortOrder' => 'INCREASING' 
     } 

    results = client.get_content(uri, query) 
    count += 1 
    doc = Nokogiri::XML.parse(results) 

    if count <= 1 
    puts "Book Details" 
    puts "--Title: "+doc.css("title").text 
    puts "--Author: "+doc.css("nameValueList/value").text 
    puts "Prices by Condition:" 
    end 

    puts "Condition: #{condition}" 
    prices = doc.css("price") 
    prices.each do |price| 
    puts "$#{price.text}" 
    end 

end 

#return count 

#end 

#end 

end 
end 

我使用的標準形式,型號,和控制器,用於一書(其具有ISBN)從軌道生成生成支架書ISBN:字符串條件:串標題:string ...

+0

有沒有理由不在控制器中處理請求? –

+0

我不確定如何做到這一點是問題。我不知道我在哪裏/如何將此代碼調整到當前項目中 – CimmerianMuse

+0

也許您可以使用after_create調用來聯繫eBay,獲取有關該書的信息,然後更新數據庫中的Book條目。這意味着您創建書籍後可能不會看到更改。 – MrYoshiji

回答

1

我找到了一個辦法。它可能不是最好的方式,但它的工作。 我的最終文件是它稱爲搜索自己的文件,作爲有效紅寶石文件列出書籍製作

<% conditions = ['BrandNew', 'LikeNew', 'VeryGood', 'Good', 'Acceptable' ]%> 
<% client = HTTPClient.new %> 
<% uri = 'https://svcs.ebay.com/services/half/HalfFindingService/v1?OPERATION-NAME=findHalfItems&REST-PAYLOAD'%> 

<%count=0%> 

<%isbn = params[:isbn] %> 
<% conditions.each do |condition| %> 

<% query = { 
     'X-EBAY-SOA-SERVICE-NAME' => 'HalfFindingService', 
     'SERVICE-VERSION' => '1.0.0', 
     'GLOBAL-ID' => 'EBAY-US', 
     'X-EBAY-SOA-SECURITY-APPNAME' => 'Compassi-3b25-406b-b3d6-d69ca7353053', 
     'RESPONSE-DATA-FORMAT' => 'XML', 
     'productID' => isbn, 
     '[email protected]' => 'ISBN', 
     'itemFilter' => 'Condition', 
     'itemFilter.name' => 'Condition', 
     'itemFilter.value' => condition, 
     'paginationInput.entriesPerPage' => '3', 
     'sortBy' => 'FixedPrice', 
     'sortBy.sortOn' => 'FixedPrice', 
     'sortBy.sortOrder' => 'INCREASING' 
     } %> 

<% results = client.get_content(uri, query) %> 
<% count += 1 %> 
<% doc = Nokogiri::XML.parse(results) %> 

<p> 
<% if count <= 1 %> 
<b><%= "Book Details" %></b> 
<br> 
<i><%= "--Title:"+doc.css("title").text %></i> 
<br> 
<i><%= "--Author: "+doc.css("nameValueList/value").text %></i> 
<br> 
<br> 
<b><%= "Prices by Condition:" %></b> 
<br> 
<br> 
<% end %> 

<b><%= "Condition: #{condition}" %></b> 
<br> 
<% prices = doc.css("price") %> 
<% prices.each do |price| %> 
<%= "$#{price.text}" %> 
<br> 
<% end %> 

</p> 

<% end %> 

然後在我的索引,我只是用來檢查價格單獨的鏈接:

<%=link_to 'Check Prices', controller: "pages", :action => "search", :isbn=> book.isbn%> 

感謝所有的幫助!我沒有得到我想要做的事,但我們現在有一個工作頁面。

0

我會通過創建一個單獨的模型類來封裝對ebay的調用。事情是這樣的:

class Book < ActiveRecord::Base 
    # existing model code 

    def price_information 
    @price_information ||= PriceInformation.new(self) 
    end 
end 

class PriceInformation 
    def initialize(book) 
    get_price_information(book.isbn) 
    end 

    def get_price_information(isbn) 
    # use your script and set accessors appropriately 
    end 
end 

在您看來,顯示頁面上(即創建後),然後你可以簡單地做book.price_information檢索相關信息,並在您的視圖中使用它。

相關問題