我一直在试图获得一个不包含id column
的模型。我认为方法select
允许这样做,但是当我访问模型时,我会看到id
字段的值为nil
。
当我使用时:
module API
class MyController < ActionController::API
def index
response = MyModel
.where("value > ?", 0)
.select('code','value')
render json: response, status: 200
end
当我使用这样的结果检查结果时
为MyModel .where(&#34;值&gt;?&#34;,0) 。选择(&#39;代码&#39;&#39;值&#39;) 。每个{| M |把m}
我明白了
<MyModel id: nil, code: "110", value: 100>
<MyModel id: nil, code: "111", value: 100>
<MyModel id: nil, code: "112", value: 100>
在我的回答中我得到了这个:
[{id: null, code: "110", value: 100},{id: null, code: "111", value: 100},{id: null, code: "112", value: 100}]
如何省略id列?
答案 0 :(得分:0)
我相信它是puts
命令的一部分。如果你只做Model.select(:attributes)
,它不应该返回id列,如果它不在列表中(在这里做了测试并且工作正常)。我相信puts命令从数据库或类似的东西中检索对象。顺便说一下,如果覆盖对象类中的puts object
方法,则可以覆盖执行to_s
时打印的内容
答案 1 :(得分:0)
在Rails中,当使用#select
方法时,即使您没有在id
方法参数中使用select
,它也会显示它,因为在Rails中默认主键是{{1 }}。如果您将主键覆盖到其他内容,则会显示该列。看看例子:
id
这是因为在我的优惠券模型中,我将主键设置为Coupon.select(:active)
# Coupon Load (0.6ms) SELECT "coupons"."active" FROM "coupons"
# => #<ActiveRecord::Relation [#<Coupon active: true, code: nil>, #<Coupon active: true, code: nil>...
。
code
虽然它出现在 inspect 结果中,但它确实存在,直到你真正拿到它。现在,如果您设置class Coupon < ActiveRecord::Base
self.primary_key = 'code'
# ..
end
进行测试,您会看到self.primary_key = ''
没有显示任何内容。但是请不要像我一样将#select
设置为primary_key
,以便从''
结果中移除id
显示。我只想表明它来自哪里,没有别的。
select