Wie "touch" einem übergeordneten Modell einer `belongs_to` association nur, wenn bestimmte Bedingungen erfüllt sind?
Ich bin mit Rails 3.1.0 und ich würde gerne "berühren" einen übergeordneten Modell einer belongs_to
Verein nur, wenn bestimmte Bedingungen erfüllt sind.
Zum Beispiel, in dieser Zeit habe ich:
belongs_to :article,
:touch => true
Ich würde "Tippen" das übergeordnete Modell nur, wenn es auf "öffentlich". Das heißt, die Article
Klasse hat ein Attribut namens access
(@article.access
=> public
oder private
) und ich möchte, um dies zu überprüfen Wert vor dem "berühren": wird dieser Wert nicht public
, dann "berühren" Sie!
Ist es möglich, dass der "direkt" in die belongs_to
Verein Aussage? Wenn ja, wie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie versuchen, lambda, wie Sie gesagt haben, aber ich bin mir nicht sicher, ob Sie zur Arbeit gehen. So etwas wie dieses:
Entsprechend der Umsetzung vielleicht können Sie versuchen, zurück
nil
stattfalse
im proc, wenn es nicht verfügbarWenn dies nicht funktioniert, verwenden Sie ein vor dem speichern Rückruf so:
Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.
Update #1
Den relevanten Teil aus
add_touch_callbacks
:Also wenn Sie true übergeben, dann wird ein einfacher touch auf
updated_at
Attribut. Wenn Sie ein Feld Namen aktualisiert dann das Feld, es sei denn, Sie übergebennil
. Wenn du an null-keine updates, nichts. Das ist, warum ich sagte, dass vielleicht Sie können versuchen, die zweite version vonbelongs_to
Vereins.add_touch_callbacks
Methode, mit der Sie verknüpft Ihre Antwort... können Sie sagen, einige mehr (z.B.: wie funktioniert es)?belongs_to
Verein?record
finden Sie unter apidock.com/rails/ActiveRecord/Associations/Builder/BelongsTo/...add_touch_callbacks
- Methode fügt den Haken aufafter_save
,after_touch
, undafter_destroy
eher alsbefore_save
wie oben in dieser Antwort.Ich glaube nicht, dass Sie anwenden können, berühren Sie mit einer Bedingung in einer belongs_to Vereins.
Es ist ein Weg, die ist ein bisschen hacky, sondern arbeitet direkt mit einer belongs_to-Verband,
Dies nicht der empfohlene Weg
Proc
/lambda
im:touch
option Wert?