在Rails中加入两个或多个表?

时间:2017-05-20 06:54:15

标签: mysql ruby-on-rails ruby-on-rails-3

我有3个表格分类帐,帐户,用户和组织

我正在尝试为每个特定用户使用分类帐ID获取帐户。

Table Ledgers contains - LedgerID, Organisation ID
Table Accounts contains  - AccountID, AccountName, LedgerID
Table Users contains - UserID, name
Table Organisation contains - OrganisationId, UserID, organisation name

继承我的模特。

class Accounts < ActiveRecord::Base
  belongs_to :ledger
end

class Ledger < ActiveRecord::Base
  has_many :accounts
  belongs_to :organisation
end

class User < ActiveRecord::Base
  has_many :organisations
end

这是我尝试过的。

def show
  if authenticated_user
  @Usersorganisations = @authenticated_user.organisations
  # This gets the user's organisations
  @ledger_id = Ledger.where("organisation_id = ?", @Usersorganisations.pluck(:id))

  render json: @ledger_id.as_json
end

但尝试这个给了我PG :: DatatypeMismatch:ERROR:

1 个答案:

答案 0 :(得分:2)

上面代码的问题是@Usersorganisations.pluck(:id)会返回一个数组,而您正在尝试进行SQL比较=,而不是使用IN运算符。

您只需将该行更改为:

即可在上面的代码中克服此问题
@ledger_id = Ledger.where(organisation_id: @Usersorganisations.pluck(:id))

更好的方法可能是使用rails has many through associations来定义User中的关联,例如:

class User < ActiveRecord::Base
  has_many :organisations
  has_many :ledgers, through: :organisations
end

之后,您只需在控制器中执行以下操作:

@ledgers = @authenticated_user.ledgers