Ich habe drei Modelle User
, Account
und AccountPermission
genannt.Schienen verschachtelte Attribute speichern
ich etablierten Assoziationen zwischen User
und Account
durch AccountPermission
so, es ist has_many :through
I creator_id auch User
und Account
mit has_many
über etabliert. Weil ich den Ersteller von Konten kennen muss.
Hier ist meine Assoziationen,
user.rb
class User < ActiveRecord::Base
has_many :created, class_name: 'Account', :foreign_key => 'creator_id'
has_many :account_permissions, :class_name => 'AccountPermission'
has_many :accounts, through: :account_permissions
accepts_nested_attributes_for :account_permissions
account.rb
class Account < ActiveRecord::Base
belongs_to :creator, class_name: 'User'
has_many :accounts_permissions, :class_name => 'AccountPermission'
has_many :users, through: :accounts_permissions
account_permission.rb
class AccountPermission < ApplicationRecord
belongs_to :user
belongs_to :account
accepts_nested_attributes_for :account
Controller # new
def new
@user = User.new
@user.account_permissions.build.build_account
respond_with(@user)
end
Ich schaffe Account
und User
gleichzeitig mit verschachtelten Attributen. Ich möchte jedoch auch eine creator_id zu meiner User
in derselben Transaktion hinzufügen.
Ich bin derzeit creator_id meinen Benutzer wie diese Zugabe ;,
resource.accounts.last.update(creator_id: resource.id)
Es ist eine wirklich niedriges Niveau Lösung, und ich fühle mich nicht gut mit ihm. Weil ich jedes Mal eine zusätzliche Aktualisierungsabfrage sende.
Frage ist, gibt es eine Möglichkeit, dies bei der Kontoerstellung zu behandeln?
AKTUALISIERT
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
# TODO:
resource.accounts.last.update(creator_id: resource.id)
if resource.active_for_authentication?
set_flash_message! :notice, :signed_up
sign_up(resource_name, resource)
respond_with resource, location: after_sign_up_path_for(resource)
else
set_flash_message! :notice, :"signed_up_but_#{resource.inactive_message}"
expire_data_after_sign_in!
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
set_minimum_password_length
respond_with resource
end
end
Ja, aber ich möchte es während der ersten Transaktion hinzufügen, dass Konto und Benutzer erstellen. – utkuDAT
teilen Sie Methode 'create' von contoller, wenn Sie können –
meine Frage aktualisiert – utkuDAT