2012-06-26 98 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