我有作者模型,有
first_name
last_name
full_name
我需要全部三个,因为当有人搜索作者时,他们需要搜索全名,但是当我对它们进行排序时,它们需要按姓氏排序,我不能只是在空间上分开它们,因为有些作者可能有两个以上的名字。
因此,在用户创建新作者的表单中,他们有两个输入字段 - first_name和last_name。因为为full_name添加第三个字段简直不好,并且放置一个结合了姓/名的值的隐藏字段几乎一样糟糕,我想知道如何只有两个字段,但是在保存时将它们组合起来并保存到full_name列,没有额外的字段,隐藏与否?
authors_controller.rb
class AuthorsController < ApplicationController
def index
@authors = Author.order(:last_name)
respond_to do |format|
format.html
format.json { render json: @authors.where("full_name like ?", "%#{params[:q]}%") }
end
end
def show
@author = Author.find(params[:id])
end
def new
@author = Author.new
end
def create
@author = Author.new(params[:author])
if @author.save
redirect_to @author, notice: "Successfully created author."
else
render :new
end
end
end
答案 0 :(得分:1)
只需向before_validation
模型添加Author
回调:
# in author.rb
before_validation :generate_full_name
...
private
def generate_full_name
self.full_name = "#{first_name} #{last_name}".strip
end
当full_name
被保存时,此回调将从first_name
和last_name
生成并设置Author
。
答案 1 :(得分:0)
在author.rb(模型文件)中定义一个创建函数:
def self.create(last_name, first_name, ...)
full_name = first_name + " " + last_name
author = Author.new(:last_name => last_name, :first_name => first_name, :full_name => fullname, ...)
author.save
author
end
在您的控制器中
Author.create(params[:last_name], params[:first_name], ..)