ユーザーモーダルで他のユーザーの個別設定を追加および削除することを許可していますが、has_many ... through
関係が正しく機能することができません。新しい設定モーダルを作成できます削除してください。ここでhas_many、through関係が設定されていません
は私User.rbです:ここでは
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
...
は私Setting.rbです:
class Setting < ActiveRecord::Base
belongs_to :user, class_name: "User"
validates :user_id, presence: true
validates :following_id, presence: true
end
私はこれらのusers_controller
機能を持つ作成/削除メソッドを呼び出す:
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
add_settings
に電話してremove_settings
と答えたら、私は成功しました。両方の時間が、私は再びadd_settings
を呼び出す場合、私はエラーを取得する:
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_settings_on_user_id_and_following_id"
だから、User.rbでhas_settings
は常にfalseを返すと、コントローラ機能remove_settings
が呼び出されたときに、ユーザー設定が削除されることはありませんようです。
user_settings
の関係にデータが入力されないのはなぜですか? has_settings
に正しい値を返すにはどうすればよいですか?