2012-06-26 58 views
1

我具有用于与一个隐藏字段创建用户一个导轨形式:默认值时,没有选择的复选框

= 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')); 
    } 
}); 

和在控制器也许从除去999 params[:user][:site_ids]

这似乎很hackish ...任何其他的想法?

回答

5

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

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

然后,你可以摆脱窗体和jQuery的隐藏字段。

+1

并且可能将其移至模型中(使用回调函数或使用自定义创建器的方法有很多选项) – tokland