我目前工作的一个简单的Rails应用4,我有这两个相关机型:如何在保存到Rails 4之前检查现有记录?
book.rb
class Book < ActiveRecord::Base
belongs_to :author
accepts_nested_attributes_for :author
end
author.rb
class Author < ActiveRecord::Base
has_many :books
end
我需要做的是检查作者已经存在,如果存在,请在书上使用它。
我books_controller.rb
class BooksController < ApplicationController
.
.
.
def create
@book = Book.new(BookParams.build(params)) # Uses class for strong params
if @book.save
redirect_to @book, notice: t('alerts.success')
else
render action: 'new'
end
end
end
有没有更好的方式来处理这种情况下,无需重复提交记录?谢谢。这里
class Book < ActiveRecord::Base
# ...
before_save :merge_author
private
def merge_author
if (author = Author.find_by(name: self.author.name))
self.author = author
end
end
end
请注意,我在这里假设你的Author
模式有一个name
场标识每个作者:
是的,名称字段我们目前在我的模型。我之前在Rails 3.x中使用这种方法,但是在Rails 4中,它会导致重复的作者记录。我会在一个单独的脚手架项目上再次进行测试。谢谢。 – Ben