原谅我,我是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
页面并传递错误消息。
由于
答案 0 :(得分:1)
我认为转到其他页面并不是一个好主意,因为你必须序列化与模型相关的错误,这将是复杂和丑陋的。
我认为您应该渲染机箱的显示页面,然后显示错误
#....
if @animal.save
@enclosure.animals.push(@animal)
redirect_to enclosure_path(@enclosure)
else
render 'enclosures/show'
end
#....