/ / Valore predefinito quando nessuna casella selezionata - jquery, ruby-on-rails, ruby, ruby-on-rails-3

Valore predefinito quando non sono selezionate caselle di controllo: jquery, ruby-on-rails, ruby, ruby-on-rails-3

Ho un modulo di rotaie per la creazione di utenti con un campo nascosto:

= hidden_field_tag "user[site_ids][]", @current_site.id, :data => @current_site.id, :class => "current_site_id"

che imposta site_id di current_site.

Ho anche alcune caselle di controllo che hanno tutti i siti elencati:

- Site.all.each do |site|
%label.checkbox
= check_box_tag "user[site_ids][]", site.id, false, :class => "sites_checkbox"
= site.name

Il motivo per cui ho il campo nascosto è se l'utente non seleziona alcuna delle caselle di controllo che imposterà almeno @current_site.

Stavo pensando di usare JQuery in questo modo: se l'utente seleziona una delle caselle di controllo ho impostato il valore su 999 che non è nel db:

$(".roles_selected").click(function() {
var selected = $(this).closest("label");
if (selected.attr("data") == "superadmin") {
$(".current_site_id").val(999);
} else {
$(".current_site_id").val($(".current_site_id").attr("data"));
}
});

e nel controller forse rimuovendo 999 da params[:user][:site_ids]

Sembra così hacker ... Altre idee?

risposte:

5 per risposta № 1

Una soluzione più semplice sarebbe quella di impostare il sito predefinito nei metodi di creazione / aggiornamento del controller. Ad esempio, qualcosa del tipo:

@user = User.new(params[:user])
@user.sites << @current_site if params[:user][:site_ids].empty?

Quindi puoi sbarazzarti del campo nascosto nel tuo modulo e del jquery.