我是一名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