4

habtm 関係の結合テーブルに保存しようとしていますが、問題があります。

私の見解では、次のようにグループ ID を渡します。

<%= link_to "Create New User", new_user_url(:group => 1) %>

 

# User model (user.rb)
class User < ActiveRecord::Base  
  has_and_belongs_to_many :user_groups
  accepts_nested_attributes_for :user_groups
end

 

# UserGroups model (user_groups.rb)
class UserGroup < ActiveRecord::Base
  has_and_belongs_to_many :users
end

 

# users_controller.rb
def new
  @user = User.new(:user_group_ids => params[:group])
end

新しいユーザー ビューでは、User.user_groups オブジェクトにアクセスできますが、フォームを送信すると、結合テーブル (user_groups_users) に保存されないだけでなく、オブジェクトが存在しなくなります。ユーザーオブジェクトの他のすべてのオブジェクトと属性は、ユーザーグループを除いて永続的です。

Railsの学習を始めたばかりなので、ここで概念的に何かが欠けているかもしれませんが、これに本当に苦労しています。

4

3 に答える 3

4

accept_nested_attributes_for を使用する代わりに、コントローラーのグループにユーザーを追加することだけを検討しましたか? そうすれば、user_group_id をやり取りする必要がなくなります。

users_controller.rb では:

def create
  @user = User.new params[:user]
  @user.user_groups << UserGroup.find(group_id_you_wanted)
end

このようにして、人々がフォームを改ざんして、自分が望むグループに自分自身を追加するのを防ぐこともできます.

于 2010-11-24T18:10:31.443 に答える
0

@jimworm の回答を拡張する:

groups_hash = params[:user].delete(:groups_attributes)
group_ids = groups_hash.values.select{|h|h["_destroy"]=="false"}.collect{|h|h["group_id"]}

このようにして、params ハッシュからハッシュをヤンクし、ID のみを収集しました。次のように、ユーザーを個別に保存できます。

@user.update_attributes(params[:user])

グループ ID を 1 行で個別に追加/削除します。

# The next line will add or remove items associated with those IDs as needed
# (part of the habtm parcel)
@user.group_ids = group_ids
于 2013-02-07T08:29:21.043 に答える
0

users_controller.rb の create メソッドはどのようになっていますか?

たとえば、ビューで fields_for 構造を使用している場合:

<% user_form.fields_for :user_groups do |user_groups_form| %>

params[:user] (またはそれが何であれ) を User.new() に渡すだけで、ネストされた属性を処理できるはずです。

于 2010-11-06T02:18:35.870 に答える