【问题标题】:How to write select statement in rails controller如何在 Rails 控制器中编写 select 语句
【发布时间】:2016-12-19 09:50:47
【问题描述】:

我只想从 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 查询中得到了。非常奇怪

【问题讨论】:

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


    【解决方案1】:

    试试这个:

    accounts = self.accounts.select(:id, :name, :account_number).order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
    

    【讨论】:

    • 试过这个它抛出以下错误:参数数量错误(0..1 为 3)因为 select 只需要一个参数,或者尝试使用 self.accounts.select("accounts.id, accounts .name, accounts.account_number").order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
    • 当我添加超过 3 列并应用 to_json 时,它只会将部分列转换为 json 并忽略列的其余部分
    • 您只想从表格中选择idnameaccount_number 这几列吗?
    • 不,我想获取大概 10-11 列,并想在从控制器返回时应用 to_json,但 to_json 方法仅将一些列转换为 json 并忽略列的其余部分
    【解决方案2】:

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

    accounts = self.accounts.select('id,name,account_number').order("created_at DESC").paginate(:page => page_count, :per_page => per_page_count)
    

    【讨论】:

    • 在遵循 sa77 回答并在这里和那里进行一些调整之后,我尝试了上述查询,当我添加超过 3 列并应用 to_json 时,我得到了预期的结果,它只会将一些列转换为 json 和忽略列的其余部分
    • 您好,我的第二个查询有任何输入吗?
    【解决方案3】:
    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] })
    }
    

    【讨论】:

    • 帐户中的条目是什么?我认为您正在循环帐户(您在其中选择特定属性),因此在使用 to_json 时您只能获得特定字段
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多