1

我有一个用于创建具有隐藏字段的用户的 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

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

我正在考虑像这样使用 JQuery:如果用户选择我将值设置为 999 的复选框之一,该复选框不在数据库中:

$(".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'));
  }
});

并且在控制器中可能会删除 999params[:user][:site_ids]

这似乎太骇人听闻了……还有其他想法吗?

4

1 回答 1

5

更直接的解决方案是在控制器的创建/更新方法中设置默认站点。例如,类似:

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

然后您可以摆脱表单和 jquery 中的隐藏字段。

于 2012-06-26T14:17:59.540 回答