未选中复选框时的默认值

Mat*_*iby 1 ruby jquery ruby-on-rails ruby-on-rails-3

我有一个rails表单用于创建具有隐藏字段的用户:

= hidden_field_tag "user[site_ids][]", @current_site.id, :data => @current_site.id, :class => 'current_site_id'
Run Code Online (Sandbox Code Playgroud)

它设置current_site的site_id.

我还有一些复选框列出了所有网站:

- Site.all.each do |site|
  %label.checkbox
    = check_box_tag 'user[site_ids][]', site.id, false, :class => "sites_checkbox"
    = site.name
Run Code Online (Sandbox Code Playgroud)

我有隐藏字段的原因是如果用户没有选择它至少会设置的任何复选框@current_site.

我正在考虑使用这样的JQuery:如果用户选择其中一个复选框,我将值设置为999,而不是在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'));
  }
});
Run Code Online (Sandbox Code Playgroud)

并且在控制器中可以从中移除999 params[:user][:site_ids]

这似乎是如此hackish ......还有其他想法吗?

Jus*_*tin 5

更直接的解决方案是在控制器的create/update方法中设置默认站点.例如,类似于:

@user = User.new(params[:user])
@user.sites << @current_site if params[:user][:site_ids].empty?
Run Code Online (Sandbox Code Playgroud)

然后你可以摆脱你的形式和jquery中的隐藏字段.