Ich versuche, Benutzermodifikationen zu erlauben, einzelne Einstellungen für andere Benutzer hinzuzufügen und zu entfernen, aber ich kann die has_many ... through
Beziehung nicht richtig funktionieren: Ich kann neue Einstellungsmodale erstellen, aber ich kann nicht abrufen oder lösche sie.has_many, durch Beziehung nicht bevölkert
Hier ist meine User.rb:
class Setting < ActiveRecord::Base
belongs_to :user, class_name: "User"
validates :user_id, presence: true
validates :following_id, presence: true
end
ich die mit diesen users_controller
Funktionen erstellen/löschen Methoden aufrufen:
def add_settings
user = User.find(params[:user_id])
if [email protected]_settings?(user)
@user.create_settings(user)
@user.save
end
end
def remove_settings
user = User.find(params[:user_id])
if @user.has_settings?(user)
@user.delete_settings(user)
@user.save
end
end
class User < ActiveRecord::Base
has_many :settings, class_name: "Setting",
foreign_key: "user_id",
dependent: :destroy
has_many :user_settings, through: :settings, source: :user
def create_settings(user)
settings.create(following_id: user.id)
end
def delete_settings(user)
settings.find_by(following_id: user.id).destroy
end
def has_settings?(user)
user_settings.include?(user)
end
...
Hier mein Setting.rb ist
Wenn ich add_settings
anrufen und dann remove_settings
bekomme ich eine Erfolgsantwort beide Male, aber wenn ich add_settings
wieder aufrufen, erhalte ich die Fehlermeldung:
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_settings_on_user_id_and_following_id"
So scheint es has_settings
in User.rb immer false zurückkehrt und die Benutzereinstellung nicht entfernt wird, wenn die Reglerfunktion remove_settings
aufgerufen wird.
Warum ist die user_settings
Beziehung nicht gefüllt? Wie kann ich has_settings
bekommen, um den korrekten Wert zurückzugeben?