In meiner Rails-App müssen Benutzer nur ihre E-Mail-Adresse eingeben und bei der Anmeldung einen Namen angeben. Geben Sie ihnen dann jedoch die Möglichkeit, umfassendere Kontaktinformationen für ihr Profil anzugeben. Daher habe ich eine User.rb Modell, das eine Verbindung mit Contact.rb hat, nämlichSo fügen Sie einer verknüpften Tabelle eine Verknüpfung mit has_one hinzu
User.rb
has_one :contact
Contact.rb
belongs_to :user
Contact.rb hat den vorhersagbaren Felder, die Sie erwarten können, wie Adresse, Postleitzahl usw., aber es speichert auch die provinc_id für eine Beziehung mit dem Province.rb-Modell, so
Contact.rb
attr_accessible :address, :city, :mobile, :postalcode, :province_id, :user_id
belongs_to :user
belongs_to :province
Province.rb
has_many :contacts
Ich tat es auf diese Weise (und nicht den Namen der Provinz als „string“ auf contact.rb Lagerung), so dass ich noch einfacher könnte (so dachte ich,) kategorisieren Benutzer nach Provinz.
In der Show Aktion eines der artists_controller, ich das Verfahren folgendes zu überprüfen, ob der Benutzer von Provinz zu sortieren versucht und dann eine artists_by_province Methode aufrufen, die führt eine Suche
if params[:province_id]
province = params[:province_id]
province = province.to_i #convert string to integer
@artistsbyprovince = User.artists_by_province(province)
else
@artists = User.where(:sculptor => true)
end
Dies ist auf dem User.rb Modell, das es nennt, wenn eine Provinz-ID in
scope :artists_by_province, lambda {|province|
joins(:contact).
where(contact: {province_id: province},
users: {sculptor: true})
}
geben wird jedoch es mir diesen Fehler gibt:
Could not find table 'contact'
Wenn ich Kontakte zu knüpfen Plural
scope :artists_by_province, lambda {|province|
joins(:contacts).
where(contacts: {province_id: province},
users: {sculptor: true})
}
Dieser Fehler
Association named 'contacts' was not found; perhaps you misspelled it?
jemand kann mir sagen, was ich falsch mache, wenn ich diese Abfrage mache?
Update: Ich änderte einige der Details nach der Einlieferung, weil mein Kopieren und Einfügen mit ihm einige Probleme hatten
P. S. ignoriere die Tatsache, dass ich nach einem "Bildhauer" suche. Ich habe die Namen der Benutzertypen für die Frage geändert.
von schema.rb
create_table "contacts", :force => true do |t|
t.string "firm"
t.string "address"
t.string "city"
t.string "postalcode"
t.string "mobile"
t.string "office"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "province_id"
end
, die mir diesen Fehler gab: Verein namens 'province_id' wurde nicht gefunden; vielleicht hast du es falsch geschrieben? – Leahcim
Bitte, sehen Sie sich meine aktualisierte Post –
Ich bin nicht sehr erfahren mit diesem. Ist deine Lösung besser als meine? Wenn ja, kannst du erklären warum? Vielen Dank. – Leahcim