2010-12-09 31 views
0

In meinem Modell sagen i:Ruby on Rails Überschreibungsstandard Accessoren

def dag 
    'test' 
end 

Aber wenn ich Schleife alle Datensätze und

verwendet
f.text_field :dag 

ich noch nicht den Wert von "test" bekommen ... Ich bekomme den Wert aus der Datenbank. Wie kann ich den Standardgetter für Formulare überschreiben? Ich funktioniert, wenn ich

Model.dag # returns 'test' 

Antwort

1

sagen Obwohl Ihr Beispiel dies nicht zeigen, haben Sie dag als Klassenmethode anstelle einer Instanzmethode definiert? Model.dag impliziert, dass es sich um eine Klassenmethode handelt, die nicht Ihren Vorstellungen entspricht.

+0

Nein. Ich meinte "Model.first.dag". Es ist eine Instanzmethode. Ich möchte ein überschreiben für f.text_field: dag und wenn ich antworte_to: xml – Alexander

0

Wenn Sie uns ein wenig mehr Code geben könnten, ist es sinnvoller, die richtige Antwort für Sie zu finden.

Gesagt, ich vermute, Sie haben Ihre dag Methode als geschützte oder private Methode deklariert. Werfen Sie einen Blick, wenn es eine private (oder protected) keywork über die Deklaration dag Verfahren auf Modellcode ist: wenn ja, das Verfahren ist privat (oder geschützt), so kann es nicht durch die Vorlage zugegriffen werden ...

0

die Klasse:

class DenLangeKamp < ActiveRecord::Base 
    belongs_to :liga, :class_name => "DenLangeLiga" 

    DAYS = { "Man" => 1, "Tir" => 2, "Ons" => 3, "Tor" => 4, "Fre" => 5, "Lør" => 6, "Søn" => 7 } 

    def dag 
    DAYS.invert[reader_attribute(:dag)] 
    end 

    def dag=(dag) 
    write_attribute(:dag, DAYS[dag]) 
    end 
end 

und dann sehen das Formular folgendermaßen aus:

......... 
<% liga_form.fields_for :kampe do |kamp_form| %> 
    <tr> 
    <td><%= kamp_form.text_field :dag %></td> 
......... 

ich bin mit dem Tag als Zahl in der DB zu speichern, so dass ich von Tag zu Tag sortieren. "dag" ist "Tag" in Englisch.

Wenn ich sage "DenLangeKamp.first.dag" bekomme ich die richtige Antwort (wie "Man", "Tir", etc) Aber im Formular bekomme ich stattdessen die Nummer! Es scheint also nicht so zu sein, dass es die Getter-Methode korrekt "überschreibt".

0

Ich habe das gleiche Problem. Die überschriebenen Funktionen scheinen auf den Index und die Show zu wirken, aber in der Bearbeitung verwendet das Formular nicht die überschriebene Funktion. Es scheint einen anderen Weg zu bekommen, die überschriebenen Funktionen zu umgehen.