我是一名Rails新手,儘管我已經構建了一個包含erb文件,ruby和postgres的應用程序,但我發現很難找出如何編寫類方法的語法,特別是如果你想做的不僅僅是CRUD。如何使用has_one創建關聯的記錄和修改數據
我有兩個表格:material & material_costs 材料has_one material_cost和material_cost屬於材料。
Material模型的每個新條目都應該自動填充material_costs的一個條目。使用材料中的三個字段,我需要修改將創建新材料成本記錄的數據。
我花了數小時試圖找到build_with函數的正確語法。不是那麼容易,即使使用rails文檔。
到目前爲止的代碼:
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
遷移
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
我在正確的軌道上?任何人都知道任何關於構建用於基本查詢和修改數據的類模型方法的用戶友好指南?謝謝,godhar
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
逼搶我的機器和PSQL服務器,重新啓動並獲得服務器返回,重新創建數據庫,最後遷移我的所有遷移我在錯誤的地獄之後。如果有人已經放棄了這些表,那麼約定是什麼?我是否應該編輯遷移文件,以便重命名列和所有這些編輯遷移不運行?即我是否有機會從頭開始,還是必須遷移我的所有更改?另外,我們是否想添加ID列?我認爲通過Rails爲我們設置ID的關係,我確信我在某處讀過這些信息?我們何時何地添加ID列?
感謝@eiko,看上去很不錯。麻煩播種測試它。應該很快就會好的! – godhar
@godhar我編輯了我的答案,包括有關您的移民困境的評論。 – eiko