Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
仅当该字段存在时才将字符串追加到SQL联接表_Sql_Ruby On Rails_Activerecord - Fatal编程技术网

仅当该字段存在时才将字符串追加到SQL联接表

仅当该字段存在时才将字符串追加到SQL联接表,sql,ruby-on-rails,activerecord,Sql,Ruby On Rails,Activerecord,我有一个用户模型,与概要文件模型连接,创建一个连接表来保存属于每个模型的所有信息。我希望能够将字符串附加到列值的末尾,但仅当该字段存在时。这是我目前拥有的 User.joins(:profile).select('users.id, full_name AS name, concat(profiles.address1, profiles.address2) AS address,

我有一个用户模型,与概要文件模型连接,创建一个连接表来保存属于每个模型的所有信息。我希望能够将字符串附加到列值的末尾,但仅当该字段存在时。这是我目前拥有的

User.joins(:profile).select('users.id,
                            full_name AS name,
                            concat(profiles.address1, profiles.address2) AS address,
                            profiles.state,
                            profiles AS phone_number')
这将给我:

id    |    Name    |    Address    |    State    |    Phone Number
1     | Bob Smith  | 123 Bakery Ln |     CA      |    123-456-7890
2     | Linda Joe  | Apt 51        |     AZ      |    098-765-4321
3     | Steve Jobs | 1 Apple Drive |     CA      |    321-654-0987
但是请注意,Linda Joe的地址只是她的公寓号码,下面是对象的外观:
(User.find(2).profile.address1==nil&&User.find(2).profile.address2==Apt 51')==true

我想找到一种只在address1存在时连接address的方法。我希望它看起来像这样:

id    |    Name    |    Address    |    State    |    Phone Number
1     | Bob Smith  | 123 Bakery Ln |     CA      |    123-456-7890
2     | Linda Joe  |               |     AZ      |    098-765-4321
3     | Steve Jobs | 1 Apple Drive |     CA      |    321-654-0987

感谢您的帮助。谢谢

您可以使用
CASE
语句在select中执行条件连接:

User.joins(:profile).select('users.id,
                        full_name AS name,
                        CASE WHEN profiles.address1 IS NOT NULL
                        THEN concat(profiles.address1, profiles.address2)
                        ELSE '' END AS address,
                        profiles.state,
                        profiles AS phone_number')

谢谢工作起来很有魅力@sclem72你总是可以接受正确的答案,以帮助其他有同样问题的人知道这是有帮助的。