after_validation在Rails中查找现有记录的id

时间:2011-12-31 20:50:36

标签: ruby-on-rails-3 activerecord model

我是Ruby on Rails的新手,在我的应用程序中,用户可以创建一个“构建”记录,只有在整个记录都是唯一的情况下才能保存。如果用户尝试创建现有的“构建”/记录并且验证失败,我需要能够将该用户重定向到现有记录。

正如我所说,我是一名新手并且勇敢地尝试使用传递给我的创建操作的参数:

    def create

    @build = Build.new(params[:build])

    if @build.save
        redirect_to :action => 'view', :id => @build.id 
    else
        @bexist = Build.find(params[:build])
        redirect_to :action => 'view', :id => @bexist.id
    end

end

显然这是不正确的......我也尝试用after_validation查看回调,但不确定如何访问甚至存储现有记录的id。有人有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您需要将attribute / value哈希值作为:conditions选项传递,并且需要指定:first :last :all 作为第一个参数。

@bexist = Build.find(:first, :conditions => params[:build])

或者,您可以使用 #first 方法,而不是将 #find :first 参数一起使用。

@bexist = Build.first(:conditions => params[:build])

在Rails 3中,您还有另一种选择......

@bexist = Build.where(params[:build]).first