未选中复选框时的默认值

时间:2012-06-26 14:07:23

标签: jquery ruby-on-rails ruby ruby-on-rails-3

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

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

设置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

如果用户没有选择任何至少会设置@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'));
  }
});

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

中删除999

这看起来如此苛刻......还有其他想法吗?

1 个答案:

答案 0 :(得分:5)

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

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

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