Как я могу получить массив флажков в хамле? - PullRequest
1 голос
/ 25 января 2010

У меня есть массив строк, называемый @theModels, в подпрограмме, реализованной как часть сервера Синатра. Эти модели являются опциями, которые пользователь может выбрать, и их получает серверная часть (идея заключается в том, что при добавлении новых моделей код интерфейса не должен изменяться).

Я использую haml для рендеринга html.

Как я могу перечислить каждый элемент в списке @theModels так, чтобы каждый элемент был флажком? И как я могу узнать, какие флажки выбрал пользователь?

Я вижу, что просто положить

= @theModels

даст мне список строк, содержащихся в @theModels, но без пробелов и т. П. И, конечно, не в флажках. Я нашел этот вопрос , который кажется похожим, но мой хам-фу недостаточно хорош, чтобы преобразовать его в то, что мне нужно.

UPDATE:

Это параметры, связанные с загрузкой файла, так что теперь код выглядит так:

%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 ]

3 голосов
/ 25 января 2010

Я думаю, что вы должны отправить содержимое в виде хэша. Это даст вам возможность установить начальные значения в форме.

Хеш @params даст вам результат.

например. { "апельсины" => "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

0 голосов
/ 25 января 2010

Ссылка, которую вы указали, связана с решением для рельсов, где у вас есть функция, возвращающая правильный 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)
...