所以,我正在使用rails。这里有三个班级
class User < ActiveRecord::Base
has_many :ownerships, as: :ownable
has_many :products, through: :ownerships
end
class Manufacturer < ActiveRecord::Base
has_many :ownerships, as: :ownable
has_many :products, through: :ownerships
end
class Product < ActiveRecord::Base
has_many :ownerships
end
# ...
# ownable_id :uuid
# ownable_type :enum
# type :string
# status :enum
class Ownership < ActiveRecord::Base
belongs_to :product
belongs_to :ownable, polymorphic: true
end
因此,情况是,用户和制造商可以通过所有权拥有产品。两者都拥有多态关联。
在我的控制器中,我想直接在{type:“PrimaryOwner”,状态:“已批准”}的用户处添加新产品,以获取将要创建的所有权。
我想要运行的代码就是这个......
# product_params is
# {
# name: "My new product ASD-Z23",
# description: "It's a product at the storage number #123QWERTY",
# ownership: {
# type: "PrimaryOwner",
# status: "Approved"
# }
# }
current_user.products.new(product_params)
我期望的是代码将创建一个拥有所有权的产品。 (因为在用户模型中,我已经告诉它它可以通过“拥有”产品。)
当然,这段代码不起作用。 有没有好的铁路方式来做到这一点? 谢谢!
答案 0 :(得分:1)
目前尚不清楚您是否正在尝试为产品创建新的所有权,或者所有权已经存在且您正在尝试使用该关联。如果是后者,则需要使用嵌套路由来指定所有权(即所有权/ 2 / products / new)。 current_user只需要与params合并。
如果您尝试创建新的所有权并且product_params中的所有权参数总是相同,那么您可以运行:after_create回调调用创建所有权的方法。
如果不是您需要同时拥有所有权和产品的表格,那么这将会有点棘手。如果是这样,请告诉我。