How do I get an array of check boxes in haml?

会有一股神秘感。 提交于 2019-12-08 04:02:23

问题


I have an array of strings, called @theModels, in a routine implemented as part of a Sinatra server. These models are options for the user to select, and are obtained by the back end (the idea being, as new models are added, then the front end code should not change).

I'm using haml to render html.

How can I enumerate each element in the list of @theModels such that each element is a checkbox? And how can I obtain which checkboxes the user has selected?

I see that just putting

= @theModels

will give me the list of strings contained in @theModels, but without spacing or the like, and certainly not in checkboxes. I've found this question that appears to be similar, but my haml-fu isn't good enough to convert that into what I need.

UPDATE:

These are options associated with a file upload, such that now the code looks like:

%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"}

Problem is, that puts a file upload button on each option, instead of at the end. I only want one submit button in the end; should I have two forms that both report their results when the 'Upload' button is pressed?

UPDATE2:

After a moment's thought, the above can be modified to:

Thanks!

%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"}

And that appears to do what I want.


回答1:


I think you should send the content as an hash instead. This will give you the opportunity to set initial values in the form.

The hash @params will give you the result.

E.g. {"oranges"=>"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




回答2:


The link you provided linked to a rails solution where you have a function returning the proper html.

You can define this function yourself:

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)


来源:https://stackoverflow.com/questions/2129387/how-do-i-get-an-array-of-check-boxes-in-haml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!