Ruby on rails 如何更新我的用户/产品关联
我正在尝试创建一个应用程序来共享或提供产品。所以我有两个模型:用户模型和产品模型。 用户可以拥有许多产品,作为所有者或借款人。一个产品只有一个所有者和一个借款人 首先,我做了如下事情:Ruby on rails 如何更新我的用户/产品关联,ruby-on-rails,ruby-on-rails-4,model-associations,Ruby On Rails,Ruby On Rails 4,Model Associations,我正在尝试创建一个应用程序来共享或提供产品。所以我有两个模型:用户模型和产品模型。 用户可以拥有许多产品,作为所有者或借款人。一个产品只有一个所有者和一个借款人 首先,我做了如下事情: >rails生成模型用户名:string 类用户 拥有多个:自有产品,类别名称:“产品”,外键:“所有者id” 有很多:借用的产品,类别名称:“产品”,外键:“借用者id” 结束 >rails生成模型产品名称:字符串所有者\u id:integer借款人\u id:integer 类产品 属于:所有者,类别名称:
>rails生成模型用户名:string
类用户
拥有多个:自有产品,类别名称:“产品”,外键:“所有者id”
有很多:借用的产品,类别名称:“产品”,外键:“借用者id”
结束
>rails生成模型产品名称:字符串所有者\u id:integer借款人\u id:integer
类产品
属于:所有者,类别名称:“用户”,外键:“所有者id”
属于:借款人,类别名称:“用户”,外键:“借款人id”
结束
我在产品控制器中添加了一个安全过滤器,该过滤器仅为产品所有者启用更新方法。但是当我想更改产品的借用者时,我遇到了某种问题,因为借用者从来都不是所有者,所以产品无法更新
所以现在我想知道我是否应该把外键从我的产品模型中拿出来,以便分离用户对自己产品的更新操作,以及用户借用不属于他的产品的更新操作
>rails生成模型用户名:string
类用户
有很多:属性
你有很多贷款吗
通过::properties拥有多个:拥有的产品
有很多:借的产品,通过::贷款
结束
>rails生成模型属性所有者\u id:integer拥有\u产品\u id:integer
类属性
属于:所有者,类别名称:“用户”,外键:“用户id”
属于:自有产品,类别名称:“产品”,外键:“产品id”
结束
>rails生成贷款借款人模型\u id:integer借用\u产品\u id:integer
集体贷款
属于:借款人,类别名称:“用户”,外键:“用户id”
属于:借用的产品,类别名称:“产品”,外键:“产品id”
结束
>rails生成模型产品名称:string
类产品
有一个:财产
有一个:贷款
拥有一个:所有者,通过::属性
有一个:借款人,通过:贷款
结束
您对此有何看法?由于借用的产品和拥有的产品是同一类型的对象,具有相同的属性列表,但仅在行为上有所不同,因此我将对
产品使用单表继承
迁移:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
# ...
t.timestamps
end
end
end
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.integer :ownerable_id
t.string :ownerable_type
# ...
t.timestamps
end
end
end
class CreateUsers
型号:
class User < ActiveRecord::Base
has_many :products, :as => :ownerable
end
class Product < ActiveRecord::Base
belongs_to :user, :polymorphic => true
end
class OwnedProduct < Product
end
class BorrowedProduct < Product
end
class用户:可拥有
结束
类产品true
结束
类别自有产品<产品
结束
类借用产品<产品
结束
这种方法的好处是,您可以在每个模型中定义适当的行为,而无需询问它是“拥有”还是“借用”。只需要您的模型做什么,让每个对象做正确的决定。谢谢,但我认为这会使事情复杂化很多。这些产品可以同时拥有和借用,它们一点也不不同。我不明白这有多复杂<代码>用户
拥有一个对象,或者它正在借用一个对象(因为它不拥有它)。由于它们没有任何不同,这也反映在产品
、借用产品
和拥有产品
都来自同一个数据库表这一事实上。唯一的区别是rails自动为您处理实例化的产品类型。我还认为,与实现属性
和贷款
模型的其他方法相比,这要简单得多。