如果表单输入不好,Ruby会重定向到同一页面并显示错误

时间:2014-10-22 12:45:48

标签: ruby-on-rails ruby

原谅我,我是Ruby的新手。我正在尝试创建一个包含动物园信息的网站。

我有enclosure模型和animal模型。

这是create

animal_controller方法的代码
def create
    if params.has_key?(:enclosure_id)
        @enclosure = Enclosure.find(params[:enclosure_id])
        @animal = Animal.new(animals_params)
        @animal.user_id = current_user.id

        if @animal.save
           @enclosure.animals.push(@animal)
           redirect_to enclosure_path(@enclosure)
        else
           # ????
        end
    else
        @animal = Animal.new(animal_params)
        @animal.user_id = current_user.id
        if @animal.save
           redirect_to @animal
        else
           render 'new'
        end
    end
end

然后我有两个地方可以创造一种新的动物。一个是在localhost:3000/animals/new使用表单。另一个是在特定机箱的show页面上使用类似的表单,例如在localhost:3000/enclosures/1/

在上面的代码中,我检查是否存在enclosure_id以确定来电的来源。如果找到参数,我将动物添加到那里的外壳。但是,如果@animal.save失败,我不明白如何返回localhost:3000/enclosures/id页面并传递验证错误消息。在没有enclosure_id的情况下,render 'new'会将用户带回../animal/new页面并传递错误消息。

由于

1 个答案:

答案 0 :(得分:1)

我认为转到其他页面并不是一个好主意,因为你必须序列化与模型相关的错误,这将是复杂和丑陋的。

我认为您应该渲染机箱的显示页面,然后显示错误

#....
    if @animal.save
       @enclosure.animals.push(@animal)
       redirect_to enclosure_path(@enclosure)
    else
       render 'enclosures/show'
    end
#....