Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ActiveRecord 4无法检索;选择为";领域_Activerecord_Ruby On Rails 4 - Fatal编程技术网

ActiveRecord 4无法检索;选择为";领域

ActiveRecord 4无法检索;选择为";领域,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,好吧,问这个我觉得很愚蠢,但这让我发疯,我想不出来。文档说我应该能够在Rails/ActiveRecord查询中使用select AS。因此: d = Dvd.where(id: 1).select("title AS my_title") 是一个有效的查询,如果我对它执行到\u sql,它将生成预期的sql: SELECT title AS my_title FROM `dvd` WHERE `dvd`.`id` = 1 但是,d.my_title将给出一个错误: NoMethodErr

好吧,问这个我觉得很愚蠢,但这让我发疯,我想不出来。文档说我应该能够在Rails/ActiveRecord查询中使用
select AS
。因此:

d = Dvd.where(id: 1).select("title AS my_title")
是一个有效的查询,如果我对它执行
到\u sql
,它将生成预期的sql:

SELECT title AS my_title FROM `dvd`  WHERE `dvd`.`id` = 1
但是,
d.my_title
将给出一个错误:

NoMethodError: undefined method `my_title' for #<ActiveRecord::Relation

上面的例子只是简化了一个事实,
SELECT AS
不会给您提供一个简单的方法来引用自定义字段,这让我很难相信

您可以编写sql查询,然后直接传递到ActiveRecord的execute方法中

query = "SELECT title AS my_title FROM `dvd`  WHERE `dvd`.`id` = 1"
result = ActiveRecord::Base.connection.execute(query)

ActiveRecord会根据数据库中的列名自动为属性创建getter和setter方法,因此不会为
my\u title
定义任何方法

对于相同的通用名称,为什么不这样做:

d = Dvd.where(id: 1).select("dvds.title")

因为我需要自定义字段来检索它的值并从中创建JSON散列。为了更清晰,我将编辑我的原始帖子。@kakubei为什么不在您的模型中重写
为_json
,以呈现您想要的json?我们已经在这样做了,但这并不能使我不必以最佳方式从数据库中提取数据。我仍然面临“选择为”的困境。另外,请注意,我已经通过使用find_by_sql解决了这个问题。我只是想用一种更讽刺的方式来做。你的代码不仅会为
result=
返回一个错误(即使你删除了多余的
execute
,试试看),而且这和我说的不想做的
find\u by\u sql
差不多。
d = Dvd.where(id: 1).select("dvds.title")