Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将同一模型类中的两列关联到另一模型中的同一列-Rails_Ruby On Rails - Fatal编程技术网

Ruby on rails 将同一模型类中的两列关联到另一模型中的同一列-Rails

Ruby on rails 将同一模型类中的两列关联到另一模型中的同一列-Rails,ruby-on-rails,Ruby On Rails,快速问题-我有两个模型类-交易和账户 帐户模型如下所示: create_table "accounts", force: :cascade do |t| t.string "account_name" t.integer "account_number" t.boolean "current_asset" t.boolean "non_current_asset" t.boolean "current_liability" t.boo

快速问题-我有两个模型类-交易账户

帐户模型如下所示:

 create_table "accounts", force: :cascade do |t|
    t.string   "account_name"
    t.integer  "account_number"
    t.boolean  "current_asset"
    t.boolean  "non_current_asset"
    t.boolean  "current_liability"
    t.boolean  "non_current_liability"
    t.boolean  "equity"
    t.boolean  "cost_of_sales"
    t.boolean  "operating_expense"
    t.boolean  "sales"
    t.boolean  "other_income"
    t.boolean  "bank"
    t.datetime "created_at",            null: false
    t.datetime "updated_at",            null: false
    t.integer  "user_id"
  end
 create_table "transactions", force: :cascade do |t|
    t.date     "date"
    t.string   "description"
    t.string   "reference"
    t.integer  "amount"
    t.integer  "account_id"
    t.boolean  "payment"
    t.boolean  "receipt"
    t.integer  "bank_id"
    t.datetime "created_at",          null: false
    t.datetime "updated_at",          null: false
    t.integer  "user_id"
    t.boolean  "vat"
    t.integer  "vat_amount"
    t.integer  "transaction_form_id"
    t.integer  "contact_id"
  end
事务模型如下所示:

 create_table "accounts", force: :cascade do |t|
    t.string   "account_name"
    t.integer  "account_number"
    t.boolean  "current_asset"
    t.boolean  "non_current_asset"
    t.boolean  "current_liability"
    t.boolean  "non_current_liability"
    t.boolean  "equity"
    t.boolean  "cost_of_sales"
    t.boolean  "operating_expense"
    t.boolean  "sales"
    t.boolean  "other_income"
    t.boolean  "bank"
    t.datetime "created_at",            null: false
    t.datetime "updated_at",            null: false
    t.integer  "user_id"
  end
 create_table "transactions", force: :cascade do |t|
    t.date     "date"
    t.string   "description"
    t.string   "reference"
    t.integer  "amount"
    t.integer  "account_id"
    t.boolean  "payment"
    t.boolean  "receipt"
    t.integer  "bank_id"
    t.datetime "created_at",          null: false
    t.datetime "updated_at",          null: false
    t.integer  "user_id"
    t.boolean  "vat"
    t.integer  "vat_amount"
    t.integer  "transaction_form_id"
    t.integer  "contact_id"
  end
用户添加一个新的事务,通过集合选择 他们需要选择一个帐户,该帐户显示除银行==true(其中
bank==true
表示银行帐户)以外的所有帐户

当用户选择银行时,他们只能选择银行帐户-其中
Bank==true
(再次通过收款选择)

我需要运行一个方法,允许我根据银行id而不是账户id通过账户模型调用所有交易金额。因此,我如何通过账户id或银行id将交易模型的两个不同列关联到Accounts类中的同一列

该方法将类似于:

<% Account.each do |account| %>
<% if account.bank == true && account.transaction(:bank_id) == account.id %>
<%= account.number %>
<%= account.number %>
<%= account.transactions.sum(:amount) %>
<% end %>
class BankAccount < ActiveRecord::Base
  has_many :transactions, as: :account
end
class Account < ActiveRecord::Base
  has_many bank_transactions, class_name: 'Transaction', foreign_key: :bank_id
end

Ps:我知道这是我的观点,不是控制器,但这是另一个讨论


我建议你后退一步,重新考虑你的方法

银行账户和总账账户是非常不同的东西(尽管它们都使用“账户”一词)。使用单个模型来表示这两个字段将导致混乱和大量空字段。考虑使用<代码>银行帐户< /代码>和<代码> GLAccount < /代码>(您可以使用自定义<代码>拐点<代码> <代码> GLAccount <代码>,如果您愿意,那么您可以做<代码> GLYAcIGN//C> > 如果您使用
BankAccount
GLAccount
,那么您只需在
交易
模型上进行多态关联,例如:

class Transaction < ActiveRecord::Base
  belongs_to :account, polymorphic: true
end
<% BankAccount.all.each do |bank_account| %>
  <%= bank_account.number %>
  <%= bank_account.transactions.sum(:amount) %>
<% end %>
class GLAccount < ActiveRecord::Base
  has_many :transactions, as: :account

  enum account_type: {
    current_asset:          0,
    non_current_asset:      1,
    current_liability:      2,
    non_current_liability:  3,
    equity:                 4,
    cost_of_sales:          5,
    operating_expense:      6,
    sales:                  7,
    other_income:           8
  }

end

您的
gl\u账户
表需要将
account\u类型
作为一个整数包含在内,这样才能起作用

其他几个随机音符:

  • if account.bank==true
    应该是
    if account.bank
  • 重复
然而,考虑到你所做的,你可以做如下事情:

<% Account.each do |account| %>
<% if account.bank == true && account.transaction(:bank_id) == account.id %>
<%= account.number %>
<%= account.number %>
<%= account.transactions.sum(:amount) %>
<% end %>
class BankAccount < ActiveRecord::Base
  has_many :transactions, as: :account
end
class Account < ActiveRecord::Base
  has_many bank_transactions, class_name: 'Transaction', foreign_key: :bank_id
end
类帐户
在这种情况下,您应该能够:

<% Account.where(bank: true).each do |bank_account| %>
  <%= bank_account.number %>
  <%= bank_account.bank_transactions.sum(:amount) %>
<% end %>


能否将这两种型号的代码张贴在描述它们之间关系的地方?(
属于/有很多)我不能告诉你我从这个答案中学到了多少!我对这一切都很陌生,非常感谢这样的回答!伟大的请随时为未来的搜索者投票/接受。从外观上看,您知道您对会计系统及其结构的看法,是否有任何与此相关的资源建议?如果这超出了问题和论坛的范围,我深表歉意。是的,我在使用、配置和集成会计系统方面有很多经验。你想要什么样的资源?有关于使用rails的会计/企业系统的阅读材料吗?我有会计背景,但软件方面的事情显然有点棘手!