3

モンゴイドを使用して、ネストされた属性を持つフォームを作成しようとしています。私のモデルには次のコードがあります。

def Company
  field :name

  has_many :users, autosave: true, dependent: :destroy
  accepts_nested_attributes_for :users
end

def User
  belongs_to :company
  has_one :profile
end

def Profile
  belongs_to :user
end

フォームから返されるパラメーターは次の順序です。

"company"=>
  {"users_attributes"=>
    {"0"=>
      {"profile_attributes"=>
        {"first_name"=>"123123abcd123", "last_name"=>"abcd123123123"},
       "email"=>"abcd@abcd.com123123123",
       "password"=>"123123123123",
       "password_confirmation"=>"123123123123"}},
   "name"=>"abcd123123123",
   "subdomain"=>"abcd123123123"}

Company.create(params[:company]) の呼び出しは機能しているようですが、ユーザー オブジェクトが適切に作成されていません。company.users を実行すると、そのオブジェクトが表示されますが、User.find を実行すると、そのドキュメントは利用できません。ドキュメントを読んで、次の方法でパラメーターを渡す必要があることに気付きました。

"company"=>
  {"users_attributes"=>
    [{"profile_attributes"=>
       {"first_name"=>"123123123", "last_name"=>"123123123"},
      "email"=>"testin321@gmail.com",
      "password"=>"123123",
      "password_confirmation"=>"123123"}],
   "name"=>"abcd123123123",
   "subdomain"=>"abcd123123123"}

ハッシュの代わりに users_attributes に配列を使用するという微妙な違いに注意してください。これは正しく機能しますが、Active Record の場合のように (そしてレールのようなものでどのようにすべきか) まったく独創的ではないように見えます。params ハッシュを取得してデータを変更して、特定の規則に従うようにしたくありません。より良い方法はありますか、何か不足していますか?

4

2 に答える 2

0

inputs as user_attributes[]配列を作成する名前を付けることができれば。

その代わりにuser_attributes[0][profile_attributes](私はあなたがこのようなものを持っていると思います)

持つようにするuser_attributes[][profile_attributes]

于 2012-04-30T17:33:54.907 に答える
0

フォームのコードを投稿できますか? 次に、特定の方法でフォーマットされている理由に取り掛かることができます。(これはコメントである必要がありますが、質問に関する詳細がわかり次第、回答を提供したいと思います。)

ビュー内のフォームに関する問題からの補足事項です。会社を作成しようとしていることに気付きました。それはネストされたユーザーとユーザーであり、ネストされたプロファイル属性でもあります。ユーザーがプロファイルのネストされた属性を受け入れると予想される場合は、それを User モデルに入れる必要があります。

def User
  belongs_to :company
  has_one :profile, dependent: destroy, autosave: true
  accepts_nested_attributes_for :profile
end

これで問題が解決する可能性があります。ユーザーが明示的な指示なしにプロファイル属性を一括割り当てしようとすると、エラーが発生する可能性があります。

于 2012-04-30T17:37:00.583 に答える