Mam następujący model:
[code=ruby]class Member < ActiveRecord::Base
belongs_to :group
has_many :member_posts
has_many :posts, :through => :member_posts
validates_existence_of :group
validates_presence_of :firstname, :lastname
validates_length_of :firstname, :lastname, :within => 2…32
end[/code]
Chcę nadpisać metody create, update i destroy żeby działały w następujący sposób:
def create(params)
self.firstname = params[:firstname]
self.lastname = parans[:lastname]
unless params[:group].nil?
group = Group.find_by_id params[:group].to_i
self.group << group unless group.nil?
end
unless params[:posts].each do |post|
post = Post.find_by_id post.to_i
self.posts << post unless post.nil?
end
return false unless self.valid?
self.save
true
end
Metody update i destroy wyglądałyby podobnie, w internecie znalazlem kilka rozbieżnych względem siebie rozwiązań. Pierwsza (ale dla inicjalizatora) trzeba wykonać polecenie super. W innych rozwiąznich była mowa że trzeba użyć callback lub inne rozwiązania, które mi nie zadziałały, pewnie coś pominołem.
Problem mam z tym, że jak wywołuje akcje create w kontrolerze to przypisuje pewne wartości do zmiennych które de facto nie istnieją w modelu, wprawdzie mogę zdefiniować własne, dodatkowe atrybuty w modelu, ale jak nie wywoła sie moja metoda, to nie zostaną wykonane odpowiednie akcje z ich uwzględnieniem.
Ogólnie chodzi mi o to, że przy posiadaniu odpowiednich wartości w params i odpowienim ich obrobieniu chcę wywołać jednolinijkowe polecenie dla modelu, a całą logikę biznesową mieć wewnątrz modelu.