2011-12-08 10 views
0

これは初めてのことですが、私はdatamapperとsinatraを使って基本的なアプリを作っています。私はいくつかの異なる設定のいくつかのテキスト入力を持つ設定ページを持っています。このコードを改善するには? (sinatra + datamapper)

このページを表示すると、データベースから情報を取り出し、入力ボックスがあればそれを入力する必要があります。名前と::私は私の設定クラスの

今のよう値

、私は名前のdoesntが既に存在し、それがそうでなければ、それを更新した場合、設定を作成することを可能にするコードの作業を持っています。

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

3の問題:

  1. 入力が(明らかに最初の時間の後に)白紙である場合、それはどのように私がダウンしてこのコードを短くすることができ

  2. "" でそれを上書き? '本当の'ルビープログラムでは、あまり冗長なコードではないので、メソッドを定義する必要がありますか?私は5つの設定を持っているので、コードの行を5回しか持っていないような感じがします。難しい点は、私が使用している正確なハッシュすべてを自分の入力とすることを余儀なくされることです。イムthatsの貧しい人々の練習かどうか、私はちょうどそれがすべて明示的にデータがそれを表示するには、「取得」するためには5回

  3. は、私は、この持ってやるべきかどうかわからない。明らかにそれ

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

    を動作しません...私が必要とするのは、params [:value] WHERE:name => "seed"とそれを印刷するための<%= @seed(???)%>を取得することです。 [:シード] `戻ってあなたのデータベースにそれを保存する前に、`のparamsの値を検証するのが賢明かもしれません。この

+0

を行う方法がわからないイム。 – 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"の場合:String – Tallboy

+0

In Rails? 'present?'は、Railsによって 'Object'に追加されたメソッドです(基本Objectクラスのように)。 Railsのすべてのクラスは 'respond_to(:present?)'でなければなりません。 ''空白? 'の反対です。最後に(私は時々作っているタイプミス)。次に、 '!params [:seed] .blank?'を試してみてください。 –

+0

私の間違いは...タグにするべきではありません:/どのように私は定期的なルビーでそれをチェックしますか? – Tallboy