我想从ActiveRecord只获取特定的列详细信息。 所以我确实运行了以下代码。
accounts = self.accounts(:select => "id, name,account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
每当执行此行时,它都会触发以下查询
SELECT "accounts".* FROM "accounts" INNER JOIN "super_account_accounts" ON "accounts"."id" = "super_account_accounts"."account_id" WHERE "super_account_accounts"."super_account_id" = 8 ORDER BY accounts.created_at DESC LIMIT 10 OFFSET 0
为什么在我已经指定了几个我想要信息的列时,它会获取所有列信息。
注: -
超级帐户模型与帐户
具有以下关联has_many :accounts, :through => :super_account_accounts, :dependent => :destroy
帐户模型与超级帐户
具有以下关联has_many :super_accounts, :through => :super_account_accounts
编辑1
通过使用以下
使其工作 accounts = self.accounts.select("id, name,account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
假设我想要获取10-11列。 在使用上面的查询之后,当我尝试应用to_json方法时,它只考虑了一些列而忽略了其余的列。
为什么用to_json方法发生这种事情的任何输入? 我错过了什么吗?
EDIT2 通过编写以下代码来获取to_json的工作
account.to_json({ :only => [:id, :name, :account_number, :column4, :column5, :column8, :column9] })
仍然不确定为什么我们需要在to_json方法中指定列名,因为我们已经从select query中获取了它。非常奇怪
答案 0 :(得分:0)
试试这个:
accounts = self.accounts.select(:id, :name, :account_number).order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
答案 1 :(得分:0)
请正确使用选择
它应该是select('id, name')
那么你的查询将是:
accounts = self.accounts.select('id,name,account_number').order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
答案 2 :(得分:0)
accounts = self.accounts.select("id, name,account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
和to_json方法
return {
account.to_json({ :only => [:id, :name, :account_number, :column4, :column5, :column8, :column9] })
}