Ich bin ein Rails Newbie und obwohl ich eine App mit Erb-Dateien, Ruby und Postgres erstellt habe, finde ich es schwierig zu finden, wie die Syntax für die Klassenmethoden schreiben, vor allem, wenn Sie mehr als nur CRUD machen wollen.Wie verknüpften Datensatz erstellen und ändern mit has_one
Ich habe zwei Tabellen: Material & Materialkosten Material has_one material_cost und material_cost gehört zu Material.
Jeder neue Eintrag im Materialmodell sollte automatisch den einen Eintrag in material_costs ausfüllen. Mit drei Feldern von Material muss ich die Daten ändern, die den neuen Materialkostensatz erstellen.
Ich habe stundenlang versucht, die richtige Syntax für eine build_with Funktion zu finden. Nicht so einfach, sogar mit den Rails Docs.
Code so weit:
class Material < ApplicationRecord
has_and_belongs_to_many :job_entries
has_one :material_costs, :material_charges, :dependent => :destroy
@material = current_material
@material_cost = @material.build_material_costs(
:cost_a4 => ((@material.cost_per_sqm + @material.ink_per_sqm) * 0.0626514876)
:cost_a3 => ((@material.cost_per_sqm + @material.ink_per_sqm) * 0.124548139)
end
class MaterialCost < ApplicationRecord
belongs_to :materials
end
Migration
class CreateMaterials < ActiveRecord::Migration[5.0]
def change
create_table :materials do |t|
t.string :product_name, :guk_name
t.integer :roll_width_in, :roll_length_m, :factor, :rounded_sale_price
t.float :list_price, :cost_per_sqm, :ink_per_sqm, :supplier_discount, :sell_per_sqm
t.timestamps
end
end
end
Bin ich auf dem richtigen Weg? Kennt jemand benutzerfreundliche Anleitungen zum Erstellen der Klassenmodellmethoden für die grundlegende Abfrage und Änderung von Daten? Dank, meine Maschine
class CreateMaterials < ActiveRecord::Migration[5.0]
def change
create_table :materials do |t|
t.string :product_name, :guk_name
t.integer :roll_width_in, :roll_length_m, :factor, :rounded_sale_price
t.float :list_price, :cost_per_sqm, :ink_per_sqm, :supplier_discount, :sell_per_sqm
t.timestamps
end
end
end
class CreateMaterialCosts < ActiveRecord::Migration[5.0]
def change
create_table :material_costs do |t|
t.float :cost_a4, :cost_a3, :cost_a2, :cost_a1, :cost_b0, :cost_b1, :cost_b2
t.float :cost_b3, :cost_b4
t.timestamps
end
end
end
Nach Schließung und den psql-Server neu zu starten und bekommen den Server zurück, neu zu erstellen, die db, godhar dann schließlich die Migration alle meine Migrationen ich in Fehler Hölle bin. Wenn man die Tische fallen gelassen hat, was ist die Konvention? Soll ich die Migrationsdateien bearbeiten, damit das Umbenennen von Spalten und alle diese Bearbeitungsmigrationen nicht ausgeführt werden? Hat ich die Chance, bei Null zu beginnen, oder muss ich auch alle meine Änderungen migrieren? Werden wir ID-Spalten hinzufügen? Ich dachte, dass Rails durch die Beziehungen die IDs für uns aufstellt, ich bin mir sicher, dass ich das irgendwo gelesen habe? Wo und wann fügen wir ID-Spalten hinzu?
dank @eiko, sieht gut aus. Schwierigkeiten beim Seeding, um es zu testen. Sollte bald in Ordnung sein! – godhar
@godhar Ich habe meine Antwort so bearbeitet, dass sie Kommentare zu deinen Wanderungssorgen enthält. – eiko