【问题标题】:concat two fields activerecord连接两个字段 activerecord
【发布时间】:2010-12-31 06:22:56
【问题描述】:

我已经习惯了预言,你可以简单地

concat(field1, ' ', field2)

但是如果我使用 activerecord 来查找 field1 和 field2,并且我需要在两者之间留一个空格,我该如何完成呢?

为你的帮助干杯

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord


    【解决方案1】:

    在你的模型中:

    def full_name
      [first_name, last_name].join(' ')
    end
    

    【讨论】:

    • 这只能用于在选择标签中显示吗?
    • 不,它只是返回一个由两个连接字段组成的字符串,所以你想在任何地方使用它。
    • 您需要澄清问题,以便我理解您的要求
    • 好吧,我想将价格和名称连接在一起形成一个选择标签,而不是我已经拥有的两个。我想知道他们如何与你给我的例子联系起来。我是 ruby​​ 的新手,但我已经花了很多时间试图让这个工作:S
    • 在您的模型中:class Post collection_select(:post, :author_id, Product.all, :id, :name_with_price)
    【解决方案2】:

    对于后代和未来的 googlers,假设 postgres(也许是 mysql?),您可以执行以下操作:

    User.select("(first_name || ' ' || last_name) as name").where(organization: current_user.organization)
    

    select 使用||SQL operator 连接来自first_namelast_name 字段的字符串,as name 在“名称”列中返回结果。

    可能会返回:

    +----+--------------------+
    | id | name               |
    +----+--------------------+
    | 3  | Ada Lovelace       |
    | 18 | Alan Turing        |
    +----+--------------------+
    

    【讨论】:

      【解决方案3】:

      我认为虚拟属性正合您的胃口。 This Railscast 解释了它们,并提供了一个与您的用例相似的示例。

      【讨论】:

        【解决方案4】:

        在连接具有不同数据类型的两个字段时使用#

        例如,将一个整数和一个字符串与+ 相加会报错。

        class User < ActiveRecord::Base
          def name
            "#{first_name} #{last_name}"
          end
        end
        

        【讨论】:

          【解决方案5】:

          扩展@Chase Gilliam 响应,这是对 MySQL 数据库的查询

          User.select("id, CONCAT(name, last_name) as value")
          

          希望有帮助

          【讨论】:

            【解决方案6】:

            我的解决方案::)

            scope :full_name_contains, lambda { |query| 
              full_name = Arel::Nodes::NamedFunction.new('concat', [
                  arel_table[:first_name], 
                  Arel::Nodes.build_quoted(' '), 
                  arel_table[:last_name]
                ]
              )
            
              where(full_name.matches("%#{query}%"))
            }
            
            def full_name
              "#{first_name} #{last_name}"
            end
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-08-06
              • 1970-01-01
              • 1970-01-01
              • 2018-08-07
              • 1970-01-01
              • 2014-06-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多