ich in Rails-Anwendungen zu viele Verbindungs eine viele haben, sieht es wie folgt aus:zu viele Beziehung in vielen einen Datensatz hinzufügen nicht
class Workspace
has_and_belongs_to_many :users, dependent: :destroy
end
class User
has_and_belongs_to_many :workspaces
end
class UserWorkspace
belongs_to :user
belongs_to :workspace
end
Schema:
create_table :users_workspaces do |t|
t.integer :user_id
t.integer :workspace_id
t.integer :role, default: 0
t.timestamps null: false
end
Dann möchte ich eine erstellen neuer Rekord wie folgt aus:
@user.workspaces.create(:workspace_id => @workspace.id, :role => 1)
oder diese
@user.workspaces << @workspace
und haben einen Fehler in logs:
(0.0ms) begin transaction
(0.0ms) begin transaction
(0.1ms) rollback transaction
(0.1ms) rollback transaction
Completed 500 Internal Server Error in 207ms (ActiveRecord: 5.5ms)
Completed 500 Internal Server Error in 207ms (ActiveRecord: 5.5ms)
ActiveRecord::UnknownAttributeError (unknown attribute 'workspace_id' for Workspace.):
app/controllers/sessions_controller.rb:10:in `block in sign_up'
app/controllers/sessions_controller.rb:4:in `sign_up'
Was mache ich falsch?
PS Controller:
def sign_up
respond_to do |format|
@user = User.new(user_params)
if @user.save
@workspace = Workspace.new(title: "#{@user.name}'s workspace")
@workspace.save
puts "workspace id: #{@workspace.id}"
@user.workspaces.create(:workspace_id => @workspace.id, :role => 1)
puts "workspaces count: #{@user.workspaces.count}"
@user.workspace = @workspace
@user.update_attributes(user_params)
flash.now[:success] = 'Welcome! Please check activation letter in your email box.'
format.js { render 'signup_message' }
else
format.js { render 'render_signup_errors' }
end
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation, :name, :workspace_id)
end
Ihre '@ user' und' @ workspace' Objekt wurde bereits beibehalten? Bitte fügen Sie hier Ihren Controller-Code hinzu. – Uzbekjon
'def sign_up antworten_zu tun | format | @user = Benutzer.neu (user_params) if @ user.save @workspace = Arbeitsbereich.neu (Titel: "#{@user.name}'s Arbeitsbereich") @ workspace.save @ user.workspaces. create (: workspace_id => @ workspace.id,: rolle => 1) @ user.workspace = @workspace @ user.update_attributes (benutzer_params) flash.now [: success] = 'Willkommen! Bitte überprüfen Sie den Aktivierungsbrief in Ihrer E-Mail-Box. format.js {machen ‚signup_message‘} sonst format.js {machen ‚render_signup_errors‘} Ende Ende Ende –
sorry für schlechtes Format –