如何使用Sinatra阅读未知的帖子数据?

时间:2014-02-18 20:13:18

标签: ruby post sinatra

假设我有一个将其设置存储在数据库中的应用程序。

要修改设置,我只需使用slim:

将每个设置打印到表单中

Sinatra部分:

get '/settings' do
  @settings = Setting.all
  slim :showsettings
end

超薄部分:

@@ showsettings
h1 Settings
form action="/settings" method="POST"
  table
    - @settings.each do |setting|
      tr
        td
          label for="#{setting.name}" #{setting.name}
        td
          input type="text" name="#{setting.name}" value="#{setting.value}"
  input.button type="submit" value="Update Settings"

当我提交表单时,我会回到/settings并希望处理POST请求。我知道所有参数都存储在params变量中。

如果我打印params,我会收到以下字符串:

["name1", "value1"]["name2", "value2"]["name3", "value3"]["name4", "value4"]

当我不知道如何命名时,如何处理所有提交的参数?当然,我可以将参数名称硬编码到代码中,但这很难维护。


修改
我基本上寻找的东西就像Perl中的keys函数,我可以用于for my $key ( keys %hash ) ......

2 个答案:

答案 0 :(得分:2)

您可以使用each直接迭代哈希中的条目,但您不一定需要使用keys

post '/settings' do
  params.each do |key, value|
    Setting.get(key).update(:value => value)
  end
end

答案 1 :(得分:1)

自己找到它:

post '/settings' do
  params.keys.each do |key|
    s = Setting.get(key)
    s.update( :value => params[key])
  end
end