2017-04-19 45 views
2

client.rbActiveRecord的 - 使用与选择

class Client < ApplicationRecord 
    belongs_to :address 
end 

address.rb

class Address < ApplicationRecord 
    has_one :state 
    has_one :country 
end 

Client#show我想返回一个包含客户信息以及其地址的JSON一起纳入。但是,我不想返回address中的一些字段(如created_at,updated_at)。

我写了这个渲染JSON -

def show 
    @client = Client.select("id, address_id").first 
    render json: underscore_to_camel(@client.as_json(:include => :address)) 
end 

就像我已经使用selectClient我怎么可以用它Address

编辑

如果我使用@client.as_json(include: {address: { except: [:created_at, :updated_at]}})结果散列没有created_at

但是当查询运行时,它在addresses上执行select *。有没有办法做到这一点,以便查询本身只选择所需的列。

回答

2

您可以使用as_json

render json: underscore_to_camel(@client.as_json(include: {address: { except: [:created_at, :updated_at]}})) 
+0

这是行不通的。但它仍然从数据库中提取所有列。有没有一种方法可以限制数据库查询级别的列?像'select'一样。 – mridula

+0

@mridula来自哪个表的所有列? – Pavan

+0

@mridula你可以在这里发布呈现的'json'吗? – Pavan

0

except选项可以使用only选项从表

render json: underscore_to_camel(@client.as_json(include: {address: { only: [:address_column1, :address_column2, ...]}})) 

选择特定的列替换你column namesaddress_column1address_column2等。

希望这会有帮助