Metoda wywołująca konstruktor i inne metody

Witam,

Postanowiłem przeprowadzić małą refaktoryzację kodu i przenieść trochę ciężaru do modeli. Kod obecnie przedstawia się tak:

[code]#app/controllers/book_controller.rb
@booksassigment = Booksassigment.new
@booksassigment.set_assigment_and_save(current_user.id, @book.id)

#app/models/booksassigment.rb
def set_assigment(user_id, book_id)
self.user_id = user_id
self.book_id = book_id
end

def set_assigment_and_save(user_id, book_id)
set_assigment(user_id, book_id)
save
end[/code]
I chciałbym móc zrobić tak:

@booksassigment = Booksassigment.create_and_set_assigment_and_save(current_user.id, @book.id)

Niestety, jakbym nie próbował z metodami, wciąż mam problem, że takie metody nie istnieją. Czy ktoś mógłby podać przykład kodu, jak to zrobić?

To, co chce uzyskać, to wywołanie metody jednej, która tworzy obiekt klasy a następnie wywołuje set_assigment i save.
Mam nadzieję, że zbytnio nie zamieszałem :slight_smile:

Druga sprawa, bardziej teoretyczna. Czy w ogóle warto tak łączyć metody?

?

[code=ruby]# jeżeli masz attr_accessible na user i book
Bookassigment.create(user: current_user, book: @book)

jeżeli masz attr_accessible na user_id i book_id

Bookassigment.create(user_id: current_user.id, book_id: @book.id)

ewentualnie

Bookassigment.where(user_id: current_user.id, book_id: @book.id).create[/code]
Jeżeli bardzo chcesz mieć osobną metodę w modelu, to może:

[code=ruby]def self.create_assigment(user, book)
where(user_id: user.id, book_id: book.id).create
end

Bookassigment.create_assigment(current_user, @book)[/code]