Ruby on rails 在Rails 4中正确建模货币交易

Ruby on rails 在Rails 4中正确建模货币交易,ruby-on-rails,ruby-on-rails-4,devise,models,Ruby On Rails,Ruby On Rails 4,Devise,Models,我正在制作一个玩具应用程序来学习Rails 4,而不只是克隆教程 用户注册我正在使用Desive gem进行用户身份验证,生成BTC pub/prv密钥对,并计算地址,并在flash消息中显示给用户,这样用户就可以充值自己的帐户。其他用户注册后,任何人都可以搜索任何人,下拉列表中会动态填充每个用户,但会在用户键入其朋友/同事的姓名时过滤姓名,无论他们想将比特币发送给谁。我现在只使用testnet实现这个想法,没有真正的BTC,别担心 无论如何,以下是我对该应用程序建模的想法: class Use

我正在制作一个玩具应用程序来学习Rails 4,而不只是克隆教程

用户注册我正在使用Desive gem进行用户身份验证,生成BTC pub/prv密钥对,并计算地址,并在flash消息中显示给用户,这样用户就可以充值自己的帐户。其他用户注册后,任何人都可以搜索任何人,下拉列表中会动态填充每个用户,但会在用户键入其朋友/同事的姓名时过滤姓名,无论他们想将比特币发送给谁。我现在只使用testnet实现这个想法,没有真正的BTC,别担心

无论如何,以下是我对该应用程序建模的想法:

class User < ActiveRecord::Base
  has_many :account
end

class Tx < ActiveRecord::Base
  has_one :receiver, class => "account"
  belongs_to :user, through :account
end

class Account < ActiveRecord::Base
  belongs_to :user
  has_many :tx
end
我不喜欢上述内容的原因是,在我看来,Tx是transaction的缩写,因为transaction在Rails中是一个保留字,实际上属于两个用户,但我的读数似乎表明我不能有这样的东西:

class User < ActiveRecord::Base
  has_many :tx
end

class Tx < ActiveRecord::Base
  has_one :receiver, class => "user"
  has_one :sender, class => "user
end

以下哪种实现更好?我很欣赏对这种模式的任何见解。

我会选择第二种方法。为了可读性,我选择了传输而不是发送,但你可以随意命名

class User < ActiveRecord::Base
  has_many :transfers
  has_many :received_transfers, :class_name => "Transfer", :foreign_key => "receiver_id"
end

class Transfer < ActiveRecord::Base
  belongs_to :user # Sender
  belongs_to :receiver, :class => "User"
end
测试它:

>> Transfer.create(:user_id => 1, :receiver_id => 2, :amount => 4.00)
=> #<Transfer id: 1, user_id: 1, receiver_id: 2, amount: #<BigDecimal:7fb3bd9ba668,'0.4E1',9(36)>, created_at: "2014-09-03 04:35:47", updated_at: "2014-09-03 04:35:47">

>> User.first.transfers
=> #<ActiveRecord::Associations::CollectionProxy [#<Transfer id: 1, user_id: 1, receiver_id: 2, amount: #<BigDecimal:7fb3c10682f0,'0.4E1',9(18)>, created_at: "2014-09-03 04:35:47", updated_at: "2014-09-03 04:35:47">]>

>> User.last.received_transfers
=> #<ActiveRecord::Associations::CollectionProxy [#<Transfer id: 1, user_id: 1, receiver_id: 2, amount: #<BigDecimal:7fb3bdabace8,'0.4E1',9(18)>, created_at: "2014-09-03 04:35:47", updated_at: "2014-09-03 04:35:47">]>

快乐编码

直到现在才看到这个帖子!我很感激你的建议。当我运行rails generate scaffold时,是否应该指定数量:整数发送者\整数接收者\整数id:整数?我知道模型会自动获得分配的id,所以这是否意味着rails g scaffold命令只需要“quantity:integer”一部分?对我来说,这没有意义,因为事务中的两个参与者必须是数据库中的列,但我不知道这是否通过在传输模型中使用关联来隐式处理。提前谢谢,不用担心!正确,rails需要包含外键,否则关联将失败。至少,根据我的经验,这样做比较容易