首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在rails控制器中编写select语句

如何在rails控制器中编写select语句
EN

Stack Overflow用户
提问于 2016-12-19 09:50:47
回答 3查看 1.1K关注 0票数 0

我只想从ActiveRecord获得特定的列详细信息。所以我运行了下面的代码。

代码语言:javascript
复制
accounts = self.accounts(:select => "id, name,account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)

每当该行被执行时,它将触发以下查询

代码语言:javascript
复制
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

为什么它得到所有的列信息时,我已经指定了少数列,我想要的信息。

注:-

超级帐户模型与帐户有以下关联

代码语言:javascript
复制
has_many :accounts, :through => :super_account_accounts, :dependent => :destroy

帐户模型与超级帐户有以下关联

代码语言:javascript
复制
has_many :super_accounts, :through => :super_account_accounts

编辑1

因此,通过使用以下方法使其工作

代码语言:javascript
复制
    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功能

代码语言:javascript
复制
account.to_json({ :only => [:id, :name, :account_number, :column4, :column5, :column8, :column9] })

仍然不确定为什么我们需要在to_json方法中指定列名,因为我们已经从select query.very奇怪中获得了这个名称。

EN

回答 3

Stack Overflow用户

发布于 2016-12-19 09:58:51

试试这个:

代码语言:javascript
复制
accounts = self.accounts.select(:id, :name, :account_number).order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
票数 0
EN

Stack Overflow用户

发布于 2016-12-19 10:02:32

请正确使用select,它应该是select('id, name'),那么您的查询将是:

代码语言:javascript
复制
accounts = self.accounts.select('id,name,account_number').order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
票数 0
EN

Stack Overflow用户

发布于 2016-12-19 10:39:37

代码语言:javascript
复制
accounts = self.accounts.select("id, name,account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)

对于to_json方法

代码语言:javascript
复制
return {
  account.to_json({ :only => [:id, :name, :account_number, :column4, :column5, :column8, :column9] })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41219811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档