Hi Vince!
Ich meinte, das so:
Wenn ich im Contoller einer Ruby on Rails Applikation in einem Methodenaufruf einen Wert ändere,
dann hat dieser keine Auswirkungen auf die Applikation selbst. Die Applikation verhält sich so,
als wenn ich diese Änderung nicht getätigt hätte. Mir scheint, als ob ich das Routing noch nicht
verstanden habe, aber die aufgerufene URL sieht so aus, als wenn sie in dem Controller
die Action show aufrufe.
Ich habe jetzt den Tipp erhalten, dass es an der @link_params liegen würde.
Ich schaue mir diese mal an.
Was ich vorhabe:
Ich habe ein Redmine Plugin und möchte dieses erweitern. Mit dem Plugin kann man Urlaubstage verwalten:
Man klickt auf einen Kalendereintrag, der Eintrag wird markiert und wird via dem Link "set holiday on this date"
als Urlaubstag markiert.
Das gleiche wollte ich jetzt für Krankheitstage erreichen, also via link "set sickness on this date" den Tag
als Krankheitstag markieren. Leider funktioniert das Ganze nicht.
Der Link "set holiday on this date" verweist auf die Action "show" im Controller. Die Action show ruft dort
die private Methode "set holiday" auf, die mittels eines
|
wcf.bbcode.Rails.title
|
1
|
WtHolidays.create(...)
|
den Urlaubstag in der Datenbank setzt.
Der Link "set sickness on this date" verweist ebenso auf die Action "show" und dort wird dann die Action
"set_sicknessday" aufgerufen, die mittels
|
RubyOnRails Quellcode
|
1
|
WtSicknessDay.create(...)
|
den Krankheitstag in der Datenbank setzt.
Der Krankheitstag wird nicht in der Datenbank gesetzt. Ich habe schon geschaut, ob mein Model defekt ist,
aber via Konsole konnte ich den Krankheitstag setzen.
Stutzig macht mich auch, dass wenn ich in der Methode set_holiday etwas ändere,
diese Änderung sich nicht auswirkt.
Die Methode show sieht so aus:
|
RubyOnRails Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def show
find_project;
authorize;
prepare_values;
ticket_pos;
prj_pos;
ticket_del;
hour_update;
prepare_tickets_array;
member_add_del_check;
update_daily_memo;
set_holiday;
set_sickday;
@custom_fields = TimeEntryCustomField.find(:all);
@link_params.merge!(:action=>"show");
end
|
Ich habe es nun versucht mit
|
RubyOnRails Quellcode
|
1
|
:before_filter set_sickday, :only => [:show]
|
und dann funktioniert es.
Das heißt, dass es läuft, aber ich sehe, dass mir da noch ein Verständnis fehlt, denn es kann ja nicht sein,
dass, wenn ich in einer (privaten) Methode des Controllers etwas verändere, sich das nicht
auf das Verhalten auswirkt. Da muss irgendwo was passieren, dessen ich mir nicht bewusst bin.
Ich bekam daher den Tipp, dass es an "@link_params" liegen würde.
Habt Ihr eine Ahnung, warum ich nicht etwas in einer privaten Methode ändern kann
und stets das ursprüngliche Verhalten sich zeigt?
Meine @link_params sieht so aus:
|
wcf.bbcode.Rails.title
|
1
2
3
|
@link_params = {:controller=>"work_time", :id=>@project,
:year=>@this_year, :month=>@this_month, :day=>@this_day,
:user=>@this_uid, :prj=>@restrict_project};
|
Die aufgerufene URL sieht so aus:
http://localhost:3000/work_time/show/exa…ser=3&year=2011
Danke für Eure Antworten! :-)