ruby-on-rails - ruby rails : Concatenate two pieces of data into one column

标签 ruby-on-rails ruby database concatenation

我的表项目中有 3 列。名字、姓氏和全名。

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>

在用户保存项目时,用户的名字和姓氏会保存到单独的列中。我现在想要将名字和姓氏都保存到全名列中,以便稍后搜索它们。

如果名字是

first_name = "Joe"
last_name = "Bloggs"

如何获取

fullname =  "Joe Bloggs"

我试过了,但是没用。

<%=f.hidden_field :fullname, :value => :first_name + :last_name %>

有人能指出我正确的方向吗?我是 Rails 的新手,所以在尝试提供帮助时请记住这一点。谢谢。

更新

现在我已将其添加到我的项目模型中:

def set_fullname
    fullname = first_name + last_name
  end

在我看来,我现在称之为:

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>
<%= f.hidden_field :fullname, :value => @project.fullname %>

当我点击提交并检查日志时,名字和姓氏像往常一样保存到表中,但全名留空。谁能看出问题出在哪里?

更新 2

查看:

<%= f.hidden_field :first_name, :value => current_user.firstname %>
<%= f.hidden_field :last_name, :value => current_user.lastname %>
<%= f.hidden_field :fullname, :value => @project.set_fullname %>

项目模型:

def set_fullname
    fullname = first_name + last_name
  end

当我尝试访问该页面时出现此错误。

undefined method `+' for nil:NilClass

最佳答案

您 View 中的 Ruby 代码在加载表单时执行,届时表单中没有内容(如果您创建新记录)。在 javascript 中编写类似的代码并将其映射到 onchange 事件 first_namelast_name 文本字段是有意义的。

或者您可以在模型的服务器端执行此操作,例如:

class Person

  before :save, :set_fullname

  def set_fullname
    fullname = "#{first_name} #{last_name}"
  end
end

before :save 每次更新模型时执行

无论如何,更简洁的解决方案是调整您的搜索查询,这样您就可以在数据库中复制信息。

在搜索时尝试这样的事情:

"first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?"

此 SQL 代码可能依赖于数据库,如果您使用的是 MySQL,则可能没问题

关于ruby-on-rails - ruby rails : Concatenate two pieces of data into one column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12743801/

相关文章:

ruby-on-rails - 在 webpacker react 应用程序中读取 rails 加密凭据

ruby-on-rails - 将 base64 图像转换为用于 Carrierwave 的 StringIO

ruby - 如何在 iPad 模拟器上运行 Cucumber、Ruby 脚本

css - 日历 css 不工作(Bootstrap、SimpleCalendar Rails)

database - Riak 后端选择 : bitcask vs leveldb

Android 预填充数据库 - 发布后添加新的预填充行

ruby-on-rails - 未选择选项时选择发送 nil 的 Rails 选项

ruby-on-rails - rake 分贝 :seed fails with 'don' t know how to build task db. 种子'

ruby-on-rails - Rails 3.1 中的 Rails.cache 错误 - TypeError : can't dump hash with default proc

database - 如何在H2数据库中创建b-tree索引?