我有一个名为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
我的代码有什么问题?感谢
答案 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
限制返回的列。您的查询仅返回列Name
。 id
和所有其他列都丢失了。在这种情况下,您将获得一个学生实例,其中所有属性均为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]
多数民众赞成,你会得到同样的结果。