如何在rails控制器

时间:2016-12-19 09:50:47

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

我想从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中获取了它。非常奇怪

3 个答案:

答案 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] })
}