我有两个模型,前端和用户以及相应的控制器和视图。
从前端视图中的form_for
我在用户控制器中调用create方法,并将新用户保存在数据库中。一切正常。
问题来自验证。
如果模型验证器出现问题,我需要在前端视图上显示错误消息...所以,如果有错误,我需要在redirect_to
前端(因为渲染似乎不可能用于不同的控制器)可能会在这里显示错误。
我还没有找到解决方案。
谢谢!
答案 0 :(得分:1)
如果可以的话,你错了。引用部分渲染有正确的想法。
假设您正在从应用程序的根目录调用您的前端,注册页面全部布置在那里。在具有此视图的控制器方法中,创建用户的实例变量,然后在表单中使用该变量。例如......
def some_method_for_the_root
@user = User.new
end
然后在你看来
all your code for the view
render :partial => '/users/new'
在该部分内,请将您的form_for @user对象。瞧,你有一个可以在主应用程序上使用的用户对象,然后如果验证失败,最好通过ajax更新,或者将用户引导到页面以明确地向他们显示错误。
这完全取决于我的经验,但这通常是我经常看到的方法。
答案 1 :(得分:0)
如果使用redirect_to,则该特定对象的验证信息将丢失。您可以尝试在闪存或会话中保存对象,在前端控制器中检索它(创建实例变量)并再次验证它,以便error_messages
帮助程序可以使用。
答案 2 :(得分:0)
非常简单,本身。使用form_for调用的方法,假设它被称为def create(在用户控制器中)。
def create @user = User.new(params[:user])
@user.save
if !@user.errors.empty?
@failed = true
end
respond_to do |format|
format.js {} # Will render the create.js.rjs file
end
end
##### create.js.rjs #####
if @failed
display the errors
else
do whatever you wish here
end