0

我正在尝试在我的模型中设置一个 Create 操作,它首先根据我拥有的参数检查数据库中是否已经存在一个对象。如果有,我想重定向到该对象的显示页面。如果没有,我想使用参数创建一个对象。我将如何做到这一点以及完成它的最佳“Rails 方式”是什么?我尝试了 find_or_create_by 但最终在我的数据库中出现了重复的条目,这正是我想要避免的。

到目前为止,这是我的创建操作:

def create
  @book = Book.new(book_params)
  if @book.save
    redirect_to @book
  else
    # do something else
  end
end

我的参数是这样设置的:

def book_params
  params.require(:book).permit(:title, :author, :isbn, :description)
end

我还对 :isbn 进行了唯一性验证。

  validates :isbn, presence: true, length: { is: 13 }, uniqueness: true, numericality: true

谢谢。

4

1 回答 1

0

在您执行查询然后重定向出去before_filter之前运行的A。create

class BooksController < ApplicationController
  before_filter :check_for_existing_book, :only => [:create]

  def create
    # your existing create logic here
  end

  private

  def check_for_existing_book
    book = Book.where(:isbn => params[:book][:isbn]).first
    if book
      redirect_to(book) and return
    end
  end
end

您可能需要清理检查逻辑params[:book][:isbn]并确保您不会因无效输入而崩溃,但这是要点。

于 2013-06-08T19:17:19.847 回答