Rails relations de base de données
-
01-10-2019 - |
Question
J'ai trois modèles que je veux interagir les uns avec les autres.
Kase, personne et et Société.
Je (je pense) configurer les relations correctement:
class Kase < ActiveRecord::Base
#HAS ONE COMPANY
has_one :company
#HAS MANY PERSONS
has_many :persons
class Person < ActiveRecord::Base
belongs_to :company
class Company < ActiveRecord::Base
has_many :persons
def to_s; companyname; end
J'ai mis le champ de sélection sur la nouvelle vue de créer Kase, et créer un nouveau point de vue de la personne comme suit:
<li>Company<span><%= f.select :company_id, Company.all %> </span></li>
Tous les ci-dessus montre avec succès un menu déroulant dynamique peuplé avec les noms de sociétés au sein des entreprises.
Ce que je suis en train de faire est d'afficher le contact de l'enregistrement de l'entreprise au sein de la Kase et par personne show.html.erb.
Par exemple, si j'ai une société appelée « Acme, Inc. » et créer un nouveau Kase appelé « Cas aléatoire » et choisissez dans le créer une nouvelle page de cas « Acme, Inc. » des entreprises menu déroulant. Je voudrais alors afficher "Acme, Inc" et "Acme, Inc. Mobile", etc. sur la show.html.erb "Cas aléatoire".
J'espère que cela a un sens à quelqu'un!
Merci,
Danny
EDIT: kases_controller
def show @kase = Kase.find(params[:id]) respond_to do |format| format.html # show.html.erb format.xml { render :xml => @kase } format.pdf { render :layout => false } prawnto :prawn => { :background => "#{RAILS_ROOT}/public/images/jobsheet.png", :left_margin => 0, :right_margin => 0, :top_margin => 0, :bottom_margin => 0, :page_size => 'A4' } end end
La solution
Je pense que les associations de modèle sont incomplètes basées sur ce que vous avez posté votre question:
class Kase < ActiveRecord::Base
has_one :company
has_many :people # Rails should handle the correct plural here
end
class Company < ActiveRecord::Base
has_many :people
belongs_to :kase
end
class Person < ActiveRecord::Base
belongs_to :company
belongs_to :kase
end
Avec les assocations mis en place correctement, vous pouvez alors accéder aux attributs d'une entreprise pour un cas donné:
kase.company.name
kase.company.mobile
-ou pour une personne donnée:
person.company.name
person.company.mobile
Vous pouvez même obtenir à la société par le cas d'une personne:
person.kase.company.name # etc...
Autres conseils
Si je comprends bien, votre fichier show contiendrait quelque chose comme ceci pour afficher le numéro mobile:
# in app/views/kases/show.html.erb
<h1><%=h kase.name %></h1>
<h2>Company Information</h2>
<ul>
<li>Company Name: <%=h kase.company.name %></li>
<li>Company Mobile: <%=h kase.company.mobile_phone %></li>
</ul>
Donnez-lui un aller, si c'est tout ce qu'il faut.