所以,每个rails项目我似乎遇到了这个问题,如果有人能够启发我,我将非常感激:
当表单位于与url / controller直接关联的视图上时,使用“正常”设置非常简单,render => :action
on fail将显示验证消息。
现在我所拥有的是一个部分坐在页面上的表单,其url / controller是show /:id而不是表单的创建操作,验证启动但我无法显示验证消息,因为我无法触发正确的渲染动作...... 我得到的最近是一个渲染=> @object但没有css / layout,我可以通过flash []重定向传递消息,但感觉不对,与jquery / client错误消息相同...
那么我如何“干净地”显示部分表单的验证消息(在父页面之下的另一个控制器/操作下)?
(先谢谢你的帮助)
编辑:现在无法粘贴实际内容,但我会尽力解释
我有一个主页,例如article / show / 01,在这个页面上是文章的内容(@article),然后在页面的底部是一个部分_commentform,带有一个发表评论的表单。此表单绑定到不同控制器的创建操作(注释控制器)。
现在如果表单是自己的“页面”/ url而不是部分,请说/ comment / create,我会这样做:
if @comment.save
redirect_to @comment
else
render => :create
end
并且验证将正常显示。
在我的情况下,表单是文章/ show / 01 url的部分内容,应该等同于上面的代码,以便在验证时失败错误消息显示在父URL上,如“render article / show / 01“? 我确信这很容易,但我不能让它工作(我只能重定向成功但不能用渲染显示错误)
答案 0 :(得分:0)
我认为显示验证错误的最佳方法是渲染部分错误。
恕我直言,使用您或您的webdesigner想要的styles / css显示错误消息的最佳和最简洁的方法是在FormBuilder中实现您自己的error_messages方法。
例如,这是我为我的最新项目实现的error_messages方法。
这是一个用ul / li输出错误列表的示例,其中包含一些自定义样式... 只需自定义并将表单构建器放在app / helpers中......
class StandardBuilder < ActionView::Helpers::FormBuilder
def error_messages
return unless object.respond_to?(:errors) && object.errors.any?
errors_list = ""
errors_list << @template.content_tag(:span, "There are errors!", :class => "title-error")
errors_list << object.errors.full_messages.map { |message| @template.content_tag(:li, message) }.join("\n")
@template.content_tag(:ul, errors_list.html_safe, :class => "error-recap round-border")
end
end
然后以我的形式:
= form_for @post, :builder => StandardBuilder do |f|
= f.error_messages
...
无需显示/渲染其他部分内容。这就是全部:)。
答案 1 :(得分:0)
如果您希望以局部方式显示任何内容(包括错误消息)
1 - 在调用partial的控制器操作中定义它 2 - 将消息作为参数传递给部分
1 - 示例
in your controller/action
if @comment.save
redirect_to @comment
else
@messages = "This is a message"
render => :create
end
in your partial
you can access the @message variable
2 - 将变量传递给部分
render :partial => “<partial name>”, :locals => { :param1 => “value”}
<partial name> – name of your partial (Ex /partials/footer)
:params1 – parameter name
“value” – value
希望这会有所帮助
感谢
sameera