14 Stimmen

Wie verwendet man eine Variable als Objektattribut in Rails?

Ich habe ein PaymentDetail-Modell mit dem Attribut "home_address_country", so dass ich Folgendes verwenden kann

    @payment_detail.home_address_country //where @payment_detail is object of that model.

Ich möchte etwas wie dieses verwenden:---

country_attribute=address_type+"_address_country"  //where address type is equal to 'home'
 @payment_detail."#{country_attribute}" 

Bedeutet, dass der Name des Attributs in einer Variablen gespeichert wird. Wie kann ich dies tun?

EDITAR

country_attribute=address_type+"_address_country"
country_list=Carmen::country_names
eval("@#{country_attribute} = #{country_list}")

42voto

Harish Shetty Punkte 63187
  • Lesen AR-Attribut

    @payment_detail.send("#{address_type}_address_country")

    OR

    @payment_detail.read_attribute("#{address_type}_address_country")
  • Schreiben AR-Attribut

    @payment_detail.send("#{address_type}_address_country=", value)

    OR

    @payment_detail.write_attribute("#{address_type}_address_country", value)
  • Einstellung Instanzvariable

    @payment_detail.instance_variable_set("@#{address_type}_address_country", value)
  • Unter Instanzvariable

    @payment_detail.instance_variable_get("@#{address_type}_address_country")

Referenz

4voto

Denis Malinovsky Punkte 5394

Der empfohlene Weg für Rails 3 ist die Verwendung von wörterbuchähnlicher Zugang :

attr = @payment_detail["#{address_type}_address_country"]
attr = "new value"
@payment_detail["#{address_type}_address_country"] = attr

read_attribute y write_attribute Methoden funktionieren nur für Rails 2.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X