2011-12-08 39 views
0

我對此很陌生,我使用datamapper和sinatra構建基本應用程序。我有一個設置頁面,有幾個文本輸入用於幾種不同的設置。如何讓這段代碼更好? (sinatra + datamapper)

查看此頁面時,應該從數據庫中提取信息並填充輸入框(如果它們在那裏)。

對於我的設置Ⅰ類有:名稱和:值

截至目前,我的代碼工作,允許如果名稱犯規已經存在要創建的設置,否則它更新它。

Setting.first_or_create(:name => "seed").update(:name => "seed", :value => params[:seed]) 

3個問題:

  1. 如果輸入爲空,它會覆蓋它與 「」(第一次明顯後)

  2. 我怎樣才能縮短這個代碼下來?在一個'真正的'ruby程序中,我應該定義一個方法,使其沒有那麼多冗餘代碼?我有5個設置,所以我覺得有5行代碼,只有幾個不同的東西是差的。困難在於,我將被迫命名=「」我的所有輸入都是我正在使用的確切散列。林不知道如果多數民衆贊成差實踐與否,或者我是否應該只是做這一切明確的5倍

  3. 爲了「得到」的數據,以顯示它,我有這樣的:

    @seed = Setting.get(:name => "seed") 
    

    這顯然不工作......我需要的是獲得params [:value] WHERE:name =>「seed」並使用<%= @seed(???)%>將其打印出來。林不知道如何做到這一點

+0

這可能是明智的驗證'則params的值:種子]'存儲它放回你的數據庫之前。 – sarnold

+0

是一次保存的所有設置(使用相同的方法)? – tokland

+0

我得到了他們所有保存謝謝Taryn,現在我試圖打電話給他們在ERB文件,我不能:/他們都顯示爲零,即使他們保存在DB – Tallboy

回答

1
@seed = Setting.first_or_create(:name => "seed") # fetch and store 
# update only if there was one 
@seed.update(:name => "seed", :value => params[:seed]) if params[:seed].present? 

<!-- show the value in the page --> 
<%= @seed.value %> 
+0

未定義的方法'禮物?爲「testseed」:字符串 – Tallboy

+0

在Rails中? 'present?'是由Rails添加到'Object'的方法(如在基礎Object類中)。 Rails中的每個類都應該'respond_to(:present?)'這與'blank'相反?首先 - 檢查你添加了什麼?最後(我經常犯的一個錯字)。然後嘗試'!params [:seed] .blank?' –

+0

我的錯誤... rails不應該在標籤中:/我如何檢查常規ruby? – Tallboy