Problem z metodami prywatnymi

Hej,

mam taki problem:

mam dwie metody prywatne w kontrolerze:

[code]def metoda_1?
params[:pub0].present? &&
params[:pub2].present? &&
params[:uid].present? &&
params[:amount].present?
end

def metoda_2?
params[:pub0].present? &&
params[:pub2].present? &&
params[:pub3].present? &&
params[:uid].present? &&
params[:amount].present?
end[/code]
Kiedy wywoluje callbkac z parameterami:

http://localhost:3000/moolah?pub0=1&pub2=1&uid=1&amount=1 rails korzysta z pierwszej metody ale gdy wywoluje http://localhost:3000/moolah?pub0=1&pub2=1&pub3=1&uid=1&amount=1
rails takze korzysta z pierszwej metody.

Powinien korzystac z drugiej i nie wiem gdzie jest blad

moze cos mi sie w oczach miesza, ale dla mnie te linki wygladaja prawie identycznie, poza jednym parametrem, skad railsy maja wiedziec co chcesz wywolac? Gdzie to masz okreslone

te metody mam okreslone w kontrolerze

metoda moolah korzysta z tych metod w taki sposob:

[code]def moolah
if metoda_1?

elsif metoda_2?

end
end

private

def metoda_1?
end

def metoda_2?
end[/code]

No drugi link wyglada rownie poprawnie dla 1 metody co i pierwszy, nie widze problemu by tam byl falsem wszystkie parametry sa

Nie myslales nad jakims valid? Jakies normalnej walidacji itp?

no wlasnie jak zmodyfikowac pierwsza metoda aby dla drugigeo linka zwracala false?

params[:pub3].present?

wtedy bedziesz mial false bo tego nie bedzie, ale to ogolnie kiepsko zrobiony kod

W zasadzie metoda moolach ma rozpoznawac w callbacku parametery i w zaleznosci od tych parametrow wykonywac rozne dzialania:

[code] def metoda_1?
params[:pub0].present? &&
params[:pub1].present? &&
params[:uid].present? &&
params[:amount].present?
end

def metoda_2?
params[:pub0].present? &&
params[:pub2].present? &&
params[:uid].present? &&
params[:amount].present?
end

def metoda_3?
params[:pub0].present? &&
params[:pub3].present? &&
params[:uid].present? &&
params[:amount].present?
end

def metod_4?
params[:pub0].present? &&
params[:pub2].present? &&
params[:pub3].present? &&
params[:uid].present? &&
params[:amount].present?
end[/code]

def moolah if metoda_1? then .. elsif metoda_2? then ... elsif methoda_3? then ... elsif metodfa_4? then ... else ... end end
Jak to zrobic inaczej aby jedna z prywatnych metod pasowala tylko do jednego konkretnego callbacka z parametrami ?

Można to uprościć i wcisnąć w jedną metodę + switch w metodzie akcji ale być może prościej będzie nie od strony ogona podejść do tematu i przyjrzeć się możliwości sprytniejszego generowania tych parametrów w formularzu?

te parametry nie sa generowane w zadnym formularzu, sa on przesylane w callbackach jak naprzyklad:

http://localhost:3000/mobiles/moolah?pub0=1&pub1=1&uid=1&amount=1

http://localhost:3000/mobiles/moolah?pub0=1&pub2=1&uid=1&amount=1

http://localhost:3000/mobiles/moolah?pub0=1&pub3=1&uid=1&amount=1

http://localhost:3000/mobiles/moolah?pub0=1&pub2=1&pub3=1&uid=1&amount=1

Kazdy z tych callbackow jest przechwytywany przez metode moolah ktora wykonuje inne zadania. Dlatego stworzylem prywatne metody ale w jednym przypadku jeden callback pasuje do dwoch metod prywatnych.

Pomijając już konwencję nazewniczą (moolah- wtf?!) i zakładając, że callback przychodzi z zewnątrz i nie masz wpływu na jego wygląd, to powinieneś mieć jakiś model, który Ci ten burdelik z paramsów przemieli, by zaczął rozmawiać elokwentnie, w rubym. Fat model, thin controller.