2012-02-07 10 views
24

Come posso aggiungere checkbox a simple_form senza associarlo al modello? Voglio creare una casella di controllo che gestirà alcuni eventi javascript, ma non lo so? Forse mi manca qualcosa nella documentazione? Want't utilizzare simile come segue:aggiungi checkbox con simple_form senza associazione con il modello?

= simple_form_for(resource, as: resource_name, url: session_url(resource_name), wrapper: :inline) do |f| 
    .inputs 
    = f.input :email, required: false, autofocus: true 
    = f.input :password, required: false 
    = f.input :remember_me, as: :boolean if devise_mapping.rememberable? 
    = my_checkbox, 'some text' 
+0

se questa casella di controllo non ha associazione con il modello perché non utilizzare l'helper checkbox standart? http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag –

+0

Sono pigro per usare vari css) –

+0

Non penso che tu possa usare helper simple_form senza campo record. Non utilizzare le classi generate con simple_form per la casella di controllo e non è necessario aggiungere css personalizzati. Mi accorgo che sei di Sevastopol e vieni al nostro locale Sevastopol.rb meetup in questo Thusday! Saluti! –

risposta

34

è possibile aggiungere un attributo personalizzato per il modello:

class Resource < ActiveRecord::Base 
    attr_accessor :custom_field 
end 

quindi utilizzare questo campo come blocco:

= f.input :custom_field, :label => false do 
    = check_box_tag :some_name 

Prova a trovare "Helpers Wrapping Rails Form" nella loro documentazione https://github.com/plataformatec/simple_form

+0

Questo mi ha fatto risparmiare un sacco di problemi. Molte grazie. –

+3

Questa è una risposta utile, dovrebbe essere accettata IMHO – hananamar

31

Potresti usare

f.input :field_name, as: :boolean 
+0

Questa dovrebbe essere la risposta accettata –

+14

si prega di notare 'senza associazione con il modello' se il' campo_name' non è definito nel modello non funzionerà – Muntasim

12

Il comando proposto da huoxito non funziona (almeno non in Rails 4). Per quanto ho capito l'errore è causato da Rails cercando di cercare il valore predefinito per :custom_field, ma poiché questo campo non esiste questa ricerca fallisce e viene lanciata un'eccezione.

Tuttavia, funziona se si specifica un valore predefinito per il campo utilizzando il parametro :input_html, ad es. In questo modo:

= f.input :custom_field, :as => :boolean, :input_html => { :checked => "checked" } 
2

Questa domanda viene prima su google senza risposta appropriata.

Dal semplice modulo 3.1.0.rc1 c'è un modo corretto di farlo spiegato sul wiki: https://github.com/plataformatec/simple_form/wiki/Create-a-fake-input-that-does-NOT-read-attributes

app/inputs/fake_input.rb:

class FakeInput < SimpleForm::Inputs::StringInput 
    # This method only create a basic input without reading any value from object 
    def input(wrapper_options = nil) 
    merged_input_options = merge_wrapper_options(input_html_options, wrapper_options) 
    template.text_field_tag(attribute_name, nil, merged_input_options) 
    end 
end 

allora si può fare <%= f.input :thing, as: :fake %>

Per questa specifica domanda è necessario modificare la seconda riga del metodo:

template.check_box_tag(attribute_name, nil, merged_input_options) 

Per le versioni precedenti admgc 3.1.0.rc1 ha dato una soluzione che è l'aggiunta del metodo mancante merge_wrapper_options:

https://stackoverflow.com/a/26331237/2055246

2

Aggiungi questo al app/inputs/arbitrary_boolean_input.rb:

class ArbitraryBooleanInput < SimpleForm::Inputs::BooleanInput 
    def input(wrapper_options = nil) 
    tag_name = "#{@builder.object_name}[#{attribute_name}]" 
    template.check_box_tag(tag_name, options['value'] || 1, options['checked'], options) 
    end 
end 

poi usarlo nelle viste come:

= simple_form_for(@some_object, remote: true, method: :put) do |f| 
    = f.simple_fields_for @some_object.some_nested_object do |nested_f| 
    = nested_f.input :some_param, as: :arbitrary_boolean 

Ad esempio, l'implementazione di cui sopra supporta correttamente i campi nidificati. Altre soluzioni che ho visto non lo fanno.

Nota: Questo esempio è HAML.

Problemi correlati