ruby-on-rails - multiple - check_box_tag onchange
¿Cómo hacer check_box en rieles? (8)
Hice casillas de verificación usando los siguientes rieles de helper:
<%= check_box("tag", tag.id) %>
Sin embargo, necesito verificar algunos de ellos por defecto. La documentación de los rieles no especifica cómo hacer esto. ¿Hay alguna manera? ¿Cómo?
Nueva función colocada en su Ayudante
def check_if_true(item)
if(item == ''true'' or item == true or item == 1 or item == ''1'')
return true
else
return false
end
end
En tu vista
<%= check_box("test", "active", {checked: check_if_true(@test.active) , :multiple => true, :style => "margin-left: 16px;"}, "true", "false") %>
El check_box_tag
lugar de check_box
tiene una forma de establecer que ha sido marcado.
El problema con todas estas soluciones es que no funciona bien con el hash de params
en los reenvíos, por lo que en este momento estoy usando algo como esto,
# ApplicationHelper
def resolve_boolean_parameter resource, attribute, options = {}
default = options.delete(:default)
return default unless params[:utf8]
return params[resource][attribute] == "1"
end
y luego en la vista:
<div><%= f.label :accepts_newsletter, "Receive Newsletters" %>
<%= f.check_box :accepts_newsletter, :checked => resolve_boolean_parameter(:user, :accepts_newsletter, default: true) %>
</div>
Esto tiene una solución muy directa que es respaldada directamente por check_box
(al menos desde los rieles 4, no check_box
documentación anterior)
<%= check_box("tag", tag.id, {checked: true}) %>
Esto hará que se marque la casilla de verificación. Por supuesto, en lugar de true
, pondrás en alguna lógica que determina si cada uno está marcado.
Los rieles dicen cómo hacer que se revise y depende del objeto. Si no tiene un objeto de instancia para usar con check_box, entonces su mejor opción es usar check_box_tag como se menciona. Si lo haces, sigue leyendo.
Aquí está el enlace a los documentos en el check_box helper. Básicamente, cómo funciona esto es que debe tener una variable de instancia definida. Esa variable de instancia debe tener un método que devuelva un entero o un booleano. De los documentos:
Este objeto debe ser un objeto instancia (@object) y no un objeto local. Se pretende que el método devuelva un número entero y, si ese entero está por encima de cero, la casilla de verificación está marcada.
Por ejemplo, supongamos que tiene una instancia @tag en su vista que tiene un método habilitado. El siguiente fragmento provocaría que la casilla de verificación se verifique cuando esté habilitada sea verdadera en el objeto @tag y se desmarque cuando sea falsa. Para tenerlo habilitado de forma predeterminada, establezca el atributo habilitado en verdadero en su controlador. Las dos últimas variables son los valores que desea enviar con el formulario cuando la casilla de verificación está marcada y desmarcada.
<%= check_box "tag", "enabled", {}, "1", "0" %>
Muchas veces, verás el check_box helper usado con un generador de formularios. Entonces, si form_for se usó para la instancia de @tag, lo más probable es que use este fragmento:
<%= f.check_box :enabled %>
No hay necesidad de escribir marcado: verdadero para rieles> = 4.0 Simplemente escriba
<%= check_box_tag "name", value, true %> # true or false
Si necesita marcar check_box en new
, y rellenar correctamente edit
, puede hacer:
<%= f.check_box :subscribe, checked: @event.new_record? || f.object.subscribe? %>
Como mencioné here
Usando check_box_tag
puede establecerlo en true
para que ya esté marcado. Más información aquí: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag