如何获取haml中的一系列复选框?

时间:2010-01-24 23:32:54

标签: ruby checkbox sinatra haml

我在作为Sinatra服务器的一部分实现的例程中有一个名为@theModels的字符串数组。这些模型是供用户选择的选项,由后端获取(想法是,随着新模型的添加,前端代码不应更改)。

我正在使用haml来渲染html。

如何枚举@theModels列表中的每个元素,使每个元素都是一个复选框?如何获取用户选择的复选框?

我看到只是把

= @theModels

会给我@theModels中包含的字符串列表,但没有间距等,当然也不在复选框中。我发现this question看似相似,但我的haml-fu不足以将其转换成我需要的东西。

更新:

这些是与文件上传相关的选项,现在代码如下:

%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
- @theModelHash.each do |key,value|
  %br
  %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
  =key
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}

问题是,在每个选项上放置文件上传按钮,而不是在最后。我最后只想要一个提交按钮;我应该有两种形式,当按下“上传”按钮时,它们都会报告结果吗?

UPDATE2:

经过一段时间的思考,上面的内容可以修改为:

谢谢!

%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
- @theModelHash.each do |key,value|
  %br
  %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
  =key


%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
  %input{:type=>"file",:name=>"file"}
  %input{:type=>"submit",:value=>"Upload"}

这似乎做了我想做的事。

2 个答案:

答案 0 :(得分:3)

我认为您应该将内容作为哈希发送。 这将使您有机会在表单中设置初始值。

hash @params将为您提供结果。

E.g。 { “桔子”=> “中1”}

#app.haml

%form{:method => 'post', :action => "/"}
  - @models.each do |key,value|
    %br
    %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
    =key
  %input{:type => :submit, :value => "Save"}

#app.rb

require 'sinatra'
require 'haml'

get '/' do
  @models = {"oranges" => true, "bananas" => false}
  haml :app
end

post '/' do
  @params.inspect
end

答案 1 :(得分:0)

您提供的链接链接到rails解决方案,其中您有一个函数返回正确的html。

您可以自己定义此功能:

Input:  key, value

Output: %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}

def check_box(key, value)

      ...

end

and call it in haml with 

=check_box(key,value)