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 № 1Una 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.