Je rencontre un problème avec to_json ne rendant pas mes attributs virtuels event_oïde ne fait pas partie de la matrice renvoyée par: p> Comment créer un attribut virtuel traité comme un attribut d'instance réelle? p> TO_JON est juste un exemple de méthode où avoir mon attribut virtuel traité comme un attribut réel serait bien. p> p> EDIT: H1>
6 Réponses :
Comment sur to_json (: méthodes => [: event_oid]) code>, cela fonctionne-t-il? p>
Cela fonctionne et je pourrais avoir à utiliser cela. J'espérais juste qu'il y avait un moyen d'affronter Aciverecord dans la pensée Event_oid était l'équivalent d'une colonne dans la table des emplacements.
implémente simplement #to_json vous-même alors:
Il y avait d'autres autres méthodes que je voulais que l'attribut virtuel soit considérée comme un attribut légitime autre que TO_JSON. Pour \ Json n'était qu'un exemple. J'aurais dû être plus clair.
Vous voulez modifier les attributs hachage. Il y a un petit code supplémentaire ici pour vous assurer que les attributs que vous aimez sont prêts à être utilisés avec TO_JSON ou une autre méthode qui dépend des attributs sur la charge d'objet. TO_JON et beaucoup d'autres méthodes Générez des listes de choses basées sur des attributs d'objets. Ce qui est renseigné sur l'initialisation de l'objet avec des tables et des noms de base de données, malheureusement, les variables d'instance ne mettent pas à jour ce hachage. P> P.s. Ce n'est pas très sec si vous avez un certain nombre d'attributs que vous souhaitez utiliser de cette manière. Vous pouvez utiliser un tableau de symboles, noms de méthodes déterministes et un bloc de classe_eval pour appliquer ce processus à plusieurs symboles à la fois. P> Nous sommes Message avec des rails interne ici. Il n'y a pas de dire comment cela pourrait causer l'échec d'autres choses. Je n'ai pas testé plus que Save et To_json, qui fonctionnent tous deux lorsque l'attribut Hash contient des touches qui ne sont pas aussi des noms de colonne. Alors utilisez-le à vos risques et périls. P> p> Avertissement strong> H2>
Merci. J'ai toujours voulu savoir comment faire ça. Cela viendra utile.
J'ai essayé Réponse de BeaSoleil François et a obtenu le fonctionnement après la modification to_json code> à
as_json code>
format.json { render json: @location.to_json(:methods => :event_oid) }
Une ancienne question, mais quelle optionnel demande est maintenant possible et simple une fois que vous savez comment.
Ici, un exemple annulable complet mais tout ce dont vous avez besoin est dans l'emplacement de la classe.
L'attribut attribut code> étend les attributs du modèle et du
après_initialize code> prend en charge l'affectation de la valeur.
require 'active_record'
ActiveRecord::Base.establish_connection(
:adapter=> "sqlite3",
:database=> ":memory:"
)
ActiveRecord::Schema.define do
create_table :events do |table|
table.column :name, :string
end
create_table :locations do |table|
table.column :name, :string
table.column :event_id, :integer
end
end
class Event < ActiveRecord::Base
has_one :location
end
class Location < ActiveRecord::Base
belongs_to :event
attribute :event_name, :string
after_initialize do
self.event_name = event.name
end
end
Event.create(name: 'Event1')
Location.create(name: 'Location1', event_id: 1)
p Model.attribute_names
p Event.first
p Event.first.location
#["id", "name", "event_id", "event_name"]
#<Event id: 1, name: "Event1">
#<Location id: 1, name: "Location1", event_id: 1, event_name: "Event1">