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