2010-01-24 44 views
0
在我的腳本代碼的提取物

(參見第一片的下面的代碼)我使用數組@post_csv_order指定散列@post[post_id]元件的順序密鑰=>值關係。當我收集所有值(如forum_id,post_title等)時,我在循環中運行賦值行@post[forum_id] = Hash[*@post_csv_order.flatten]。爲什麼我想要這個數組?我想只在一個地方有所有的鍵名(= csv頭)和key =>值定義。因此,當我更改訂單或添加新的細節時,我不需要在代碼的其他任何地方進行更改。即使使用對象而不是散列,我也希望擁有這種數組方法。正確的代碼流在附加的代碼? (紅寶石)

要創建數組@post_csv_order必須定義數組的第二項,否則我得到undefined local variable or method。更多關於整個腳本

點點:它流像我但─解析論壇頁面,並且給了我posts.I過程的數組,並獲得我每想後的所有細節,並儲存它。我想在此時使用數組@post_csv_order來創建這些細節的新散列。我還希望使用數組@post_csv_order來保存我獲取到csv的所有數據,並且在我運行腳本時下次讀取該csv,以便可以更新任何字段(如上次發佈作者,最後發佈日期,視圖數量)。

require 'pp' 

@post = {} 

forum_id = 123 
post_title = "Test post" 

@post_csv_order = [ 
    ["ForumID" , forum_id], 
    ["Post title", post_title] 
] 

@post[forum_id] = Hash[*@post_csv_order.flatten]      

pp @post 

,所以我想我可以通過定義陣列中使用的所有變量,並將其forum_id , post_title = ""分配空字符串修復它,但我不知道這是否是正確的方式如何在Ruby中做到這一點。

require 'pp' 

@post = {} 

forum_id , post_title = "" 

@post_csv_order = [ 
    ["ForumID" , forum_id], 
    ["Post title", post_title] 
] 

forum_id = 123 
post_title = "Test post" 

@post[forum_id] = Hash[*@post_csv_order.flatten]      


pp @post 

PS。有人可以建議或編輯標題嗎?我不知道如何命名它...

+0

讓我們來說說我想對我的腳本做什麼...也許它給每個人更好的照片這裏發生了什麼。我想有一個數組什麼定義「一些文本」,並將此字符串鏈接到some_variable.So我認爲陣列數組是我的一個很好的解決方案,因爲我關心的是some_va的「一些文本」<->的順序riable ** construct.And我想**這個數組作爲一個位置定義**所有構造像那樣在整個腳本中。然後我想在存儲/訪問/保存/修改some_variable的值時使用這個數組。我可以使用散列哈希,散列對象或你建議 – Radek 2010-01-25 02:34:18

回答

1

我並不完全清楚你想要做什麼,但我想你可能會通過使用Post對象來解決很多挑戰,有一個論壇ID,帖子標題等您的導入方法會創建一些這些對象,然後可以操縱,設置爲默認值等,而不使用散列。

編輯

我覺得做你的描述會是怎樣的「紅寶石-IST」的方式:

@post_csv_order = [ 
    ["ForumID" , Method_To_Get_Forum_Id_Or_Nil || ""], 
    ["Post title", Method_To_Get_Post_Title_Or_Nil || ""] 
] 

但我還是不是你在做什麼明確的 - 是這種方法在CSVs行的迭代中?

編輯2 哈希的問題是他們不能保證排序,所以你需要確認訂單一旦出來。在僞代碼,這聽起來像你要做到以下幾點:

  • 解析頁面 - >結果在許多論壇 項
  • 採取論壇條目,並將其保存以供將來檢索
  • 正確順序和唯一鍵
  • 在日後重新加載的對象,在分析論壇比較它們一個新的通行 和更新(和 保存),如果不同

我怕我會爲h大家指點回來使用ActiveRecord和對象。在這裏使用哈希是可能的,但這正是Ruby和Rails設計爲您所做的。

例如,做你上面做什麼,所有你需要做的是(主要是真正的代碼):

p = Post.new 
p.unique_key = create_unique_key(forum_id) 
p.forum_id = forum_id 
p.post_title = post_title 
p.save 

,並讓他們回來以後(主要是真正的代碼):

all_posts = Posts.find(:all) 
all_posts.each do | post | 
    update_if_changed(post, parsed_post[post.unique_key]) 
end 
+0

@aronchick:是的,你是對的。在我看來,做這件事似乎更容易,我也在想這件事。我可能會重寫代碼以使用對象。不過,我想知道答案。如果有:-)謝謝你的建議... – Radek 2010-01-24 23:56:21

+0

@aronchick:我編輯了這個問題並添加了**關於整個腳本的更多細節**段落 – Radek 2010-01-25 02:25:10

+0

@aronchick:您提供的代碼來自ActiveRecord? – Radek 2010-01-25 23:38:07