首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在概念上对客户-商家事务模型进行建模,例如在ActiveRecord中?

问如何在概念上对客户-商家事务模型进行建模,例如在ActiveRecord中?
EN

Stack Overflow用户
提问于 2014-08-02 00:44:39
回答 2查看 149关注 0票数 0

我有一个客户模型,一个商人模型和一个交易模型。客户可以与商家进行交易,商人也可以与客户进行交易。最后,我想提出这样的疑问:

  1. 所有由客户进行的交易
  2. 所有由商人进行的交易
  3. 所有客户X对商人Y的交易(反之亦然)
  4. 可选:首先使用特定标记完成所有事务,然后查找与这些事务相关的所有相关商家和客户。这是一个很好的功能,但是如果它太复杂,无法用答案来解释,那就不用担心了。

那么,从概念上讲,我应该如何为这些模型创建关联呢?像客户has_many :商人,通过::事务(反之亦然)?还是使用多态关联?等。

非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-02 01:03:29

从概念上讲,事务模型连接了客户和商人,因此:

代码语言:javascript
复制
class Customer < ActiveRecord::Base
  has_many :transations
  has_many :merchants, through: :transactions
end

class Merchant < ActiveRecord::Base
  has_many :transactions
  has_many :customers, through: :transactions
end

class Transaction < ActiveRecord::Base
  belongs_to :customer
  belongs_to :merchant
end

要查找客户的所有交易:

代码语言:javascript
复制
customer.transactions

找出商人的所有交易:

代码语言:javascript
复制
merchant.transactions

找到所有的客户#1的交易为商人#25

代码语言:javascript
复制
customer = Customer.find(1)
customer.transactions.where(merchant_id: 25)

找到所有的商人1号的交易为客户#8

代码语言:javascript
复制
merchant = Merchant.find(1)
merchant.transactions.where(customer_id: 8)

通过标记查找所有事务(假设标记是字符串字段):

代码语言:javascript
复制
transactions = Transaction.where(tag: 'best-seller')

找到所有交易标记为“畅销书”的商人:

代码语言:javascript
复制
merchants = Merchant.includes(:transaction).where(transaction: {tag: 'best-seller'})

找到所有带有“畅销书”标签的客户:

代码语言:javascript
复制
customers = Customer.includes(:transation).where(transaction: {tag: 'best-seller'})
票数 1
EN

Stack Overflow用户

发布于 2014-08-02 05:17:22

好的,“注入”的建议看起来很棒。以下是ActiveJDBC中的相同内容

首先定义模型:

代码语言:javascript
复制
public class Customer extends Model {}
public class Merchant extends Model {}
public class Transaction extends Model {}

第二,创建表:

顾客:

代码语言:javascript
复制
id | first_name | last_name | etc

商人:

代码语言:javascript
复制
id | name | address1 | etc

交易:

代码语言:javascript
复制
id | customer_id | merchant_id | tag | etc

查找客户的所有事务:

代码语言:javascript
复制
customer.getAll(Transaction.class);

找出商人的所有交易:

代码语言:javascript
复制
merchant.getAll(Transaction.class);

找到所有的客户#1的交易为商人#25

代码语言:javascript
复制
customer = Customer.findById(1);
customer.get(Transaction.class, "merchant_id = ?", 25);

找到所有的商人1号的交易为客户#8

代码语言:javascript
复制
 merchant = Merchant.findById(1);
 merchant.get(Transaction.class, "customer_id = ?", 8);

通过标记查找所有事务(假设标记是字符串字段):

代码语言:javascript
复制
transactions = Transaction.where("tag = ?", "best-seller");

找到所有交易标记为“畅销书”的商人:

代码语言:javascript
复制
transactions = Transaction.where("tag = 'best-seller'").include(Merchant.class);
//iterate over transactions, and get a merchants:
transactions.get(i).getAll(Merchant.class)

这种方法只运行2个SQL查询,而且运行速度非常快。

我希望这能帮到你

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25090554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档