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を使用することを考えていました:ユーザーがチェックボックスの1つを選択した場合、データベースにない値を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]

それはとてもハックに思えます...他のアイデアはありますか?

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 に答える