/ / Valor padrão quando nenhuma caixa de seleção é selecionada - jquery, ruby-on-rails, ruby, ruby-on-rails-3

Valor padrão quando nenhuma caixa de seleção é selecionada - jquery, ruby-on-rails, ruby, ruby-on-rails-3

Eu tenho um formulário de trilhos para criar usuários com um campo oculto:

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

que define o site_id do site atual.

Também tenho algumas caixas de seleção com todos os sites listados:

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

O motivo pelo qual tenho o campo oculto é si, se o usuário não selecionar nenhuma das caixas de seleção que definirá pelo menos o @current_site.

Eu estava pensando em usar o JQuery assim: se o usuário selecionar uma das caixas de seleção, defino o valor como 999, que não está no banco de dados:

$(".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 no controlador talvez removendo 999 de params[:user][:site_ids]

Isso parece tão hackish ... Alguma outra idéia?

Respostas:

5 para resposta № 1

Uma solução mais direta seria definir o site padrão nos métodos de criação / atualização do seu controlador. Por exemplo, algo como:

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

Então você pode se livrar do campo oculto em seu formulário e do jquery.