我的表项目中有 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_name
和 last_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/