如何在rails 5中使用select .... as和concat

时间:2016-09-24 11:22:13

标签: ruby-on-rails

我有一个名为Student的表,student表包含id,first_name和last_name。我正在尝试选择并连接first_name和last_name,并将列显示为" Name"。这是我的问题:

Student.select("concat(first_name, ' ', last_name) as 'Name'").find(201410204)

但它返回

SELECT  concat(first_name, ' ', last_name) as 'Name' FROM `students` WHERE `students`.`id` = 201410204 LIMIT 1

#<Student id: nil>

但是当我尝试将查询粘贴到mysql workbench中时,它会返回ID为201410204且列名为&#34; Name&#34;的学生姓名。

Click to see the result of the query

我的代码有什么问题?感谢

4 个答案:

答案 0 :(得分:2)

您还需要选择ID:

@echo off
set year=%date:~6,4% set month=%date:~3,2% set day=%date:~0,2% set
path = D:\Folder1\Folder2\Folder3\Projectname4\System NR
Folder5\Device Folder6\%year%-%month%-%day%\Channel Folder8\Time
Folders??\filename*.jpg
MOVE D:\Folder1\Folder2\Folder3\Projectname4\System NR Folder5\Device Folder6\%year%-%month%-%day%\ Channel Folder8\Time
Folders??\filename*.jpg D:\Folder1\WEBFOLDER\Project_Folder\Name
Folder\0101\0101.jpg

答案 1 :(得分:0)

使用select限制返回的列。您的查询仅返回列Nameid和所有其他列都丢失了。在这种情况下,您将获得一个学生实例,其中所有属性均为nil。仅设置了属性Name。当您尝试Student.select("concat(first_name, ' ', last_name) as 'Name'").find(201410204).Name时,您会看到正确的结果。

当您想要获取所有属性时,您必须像Student.select("concat(first_name, ' ', last_name) as 'Name', *").find(201410204)

那样扩展您的选择

修改

我确实在https://de.piliapp.com/mysql-syntax-check/检查了mysql,我不知道为什么,但你必须先命名*

Student.select("*, concat(first_name, ' ', last_name) as 'Name'").find(201410204)

答案 2 :(得分:0)

一种解决方案

在模型中创建方法

def full_name
   "#{self.try(:first_name)} #{self.try(:last_name)}"
end

Now 

Student.find(121).full_name

答案 3 :(得分:0)

让我给你两个解决方案,一个使用 power of rails ,另一个使用 scalability of rails

1)(使用铁轨的力量)

Student模型中创建名为full_name的方法并连接first_name and last_name

class Student < ActiveRecord::Base
.....

def full_name
   "#{try(:first_name)} #{try(:last_name)}".to_s
end
.....
end

现在打开控制台或任何你需要的地方,

student = Student.find(201410204)

student.full_name

就是这样,你会得到全名。

2)使用rails的可伸缩性,甚至可以执行SQL查询。

student = ActiveRecord::Base.connection.exec_query("SELECT CONCAT(first_name,' ', last_name) FROM students where students.id = 201410204")

它返回一个数组,现在可以使用

进行检索

student.rows[0]

多数民众赞成,你会得到同样的结果。