Many to many, delete from collection

Witajcie

[code]class Job < ActiveRecord::Base
has_many :job_tasks
has_many :tasks, :through => :job_tasks
end

class Task < ActiveRecord::Base
has_many :job_tasks
has_many :jobs, :through => :job_tasks
end

class JobTask < ActiveRecord::Base
belongs_to :job
belongs_to :task
end[/code]
Dodaje task do joba:

@job.tasks << @task

Jak ten task z joba usunac ? :slight_smile:

Pozdrowienia

Czyli ze co pytanie twoje jest jak usunąc jakieś dane z tablicy? Hasha? Bo na to wygląda. Jak tak to kilka minut z dokumentacja powinno ci wystarczyć. Czytanie jej nie boli raczej ;]

Czlowieku, przeczytaj dokladnie pytanie, chodzi o relacje wiele do wiele i kolekcje AR. Gdyby to byla zwykla relacja 1:n to bym zrobil @jobs.tasks.delete(@task) i po sprawie.

Pozdrowienia

relacja wiele do wielu i metoda delete - wszystko jest w dokumentacji, a apidock.com się bardzo przyjemnie używa :wink:

@hosiawak, rozumiem ze habtm ma metode delete, ja jednak musze skorzystac w tym wypadku z tabeli laczacej, bo to moj model na ktorym wykonuje dodatkowe operacje.

Problem jest taki ze w tym wypadku metoda delete nie daje oczekiwanego rezultatu, to znaczy element nie jest usuwany z kolekcji.

Pozdrowienia

Wklej jakiś większy kawałek kodu, który nie daje oczekiwanego rezultatu i napisz czego dokładnie oczekujesz.

[code]#model zalogi

class Crew < ActiveRecord::Base
belongs_to :user # wlasciciel zalogi
has_many :crew_users # relacja n:n etap 1
has_many :users, :through => :crew_users # relacja n:n etap 2
end

#tabela laczaca zaloge z uzytkownikami

class CrewUser < ActiveRecord::Base
belongs_to :crew
belongs_to :user
end

#model uzytkownika

class User < ActiveRecord::Base
has_many :crew_users #relacja n:n etap 1
has_many :crews, :through => :crew_users #relacja n:n etap 2
end

#kawalek kontrolera zalogi

class CrewsController < ApplicationController
def join # to dziala
@crew = Crew.find(params[:id])
@crew.users << @current_user if !@crew.users.include?(@current_user)
redirect_to(crew_url(@crew))
end

def leave # to juz nie dziala
@crew = Crew.find(params[:id])
@crew.users.delete(@current_user)
@crew.save
redirect_to(crew_url(@crew))
end
end[/code]
Chodzi o to ze gdy wywoluje @crew.users.delete(@user) , @user nie jest usuwany z kolekcji @crew.users . Ma ktos jakis pomysl ?

Pozdrowienia

chcesz go usunąć z bazy czy tylko z kolekcji ? Pozatym z tego co widzę crew ma jednego usera bo jest belongs_to user. W każdym razie spróbuj cos takiego

belongs_to: user, :dependent => :destroy/:delete/:delete_all

akcja to zależy co dokładnie chcesz zrobić, czy skasować z bazy czy z tylko z obiektu.