2011-12-08 38 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