如何访问部分中的验证消息?

时间:2010-10-29 08:09:53

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

所以,每个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“? 我确信这很容易,但我不能让它工作(我只能重定向成功但不能用渲染显示错误)

2 个答案:

答案 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