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

Ruby on rails 如何访问部分中的验证消息?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,因此,每个rails项目我似乎都遇到了这个问题,如果有人能启发我,我将非常感激: 使用“正常”设置,当表单位于与url/控制器直接关联的视图上时,非常简单,render=>:actionon fail将显示验证消息 现在我看到的是一个部分中的表单,它位于一个页面上,其url/controller是show/:id,而不是表单的创建操作,验证开始了,但我无法显示验证消息,因为我无法触发正确的呈现操作。。。 我得到的最接近的是一个render=>@对象,但没有css/布局,我可以用flash[]通过

因此,每个rails项目我似乎都遇到了这个问题,如果有人能启发我,我将非常感激:

使用“正常”设置,当表单位于与url/控制器直接关联的视图上时,非常简单,
render=>:action
on fail将显示验证消息

现在我看到的是一个部分中的表单,它位于一个页面上,其url/controller是show/:id,而不是表单的创建操作,验证开始了,但我无法显示验证消息,因为我无法触发正确的呈现操作。。。 我得到的最接近的是一个render=>@对象,但没有css/布局,我可以用flash[]通过重定向传递消息,但感觉不对,jquery/客户端错误消息也是如此

那么,我如何才能“干净”地在部分中显示表单的验证消息(在父页面以外的其他控制器/操作下)

(提前感谢您的帮助)

编辑:现在无法粘贴实际内容,但我会尽力解释

我有一个主页,例如article/show/01,在这个页面上是文章的内容(@article),然后在页面底部是一个带有发表评论表单的部分评论表单。此表单绑定到其他控制器(注释控制器)的创建操作

现在,如果表单位于其自己的“页面”/url上,而不是部分页面,比如说/comment/create,那么我将执行以下操作:

if @comment.save
redirect_to @comment
else 
render => :create
end
验证将正常显示

在我的例子中,表单位于article/show/01 url上的a部分中,应该与上面的代码等效什么,以便在验证失败时在父url上显示错误消息,如“render article/show/01”?
我确信这很容易,但我无法让它工作(我只能在成功时重定向,但无法使用渲染显示错误)

我不认为显示验证错误的最佳方法是渲染部分

依我看,使用您或您的Web设计师想要的样式/css显示错误消息的最佳干净方法是在FormBuilder中实现您自己的错误消息方法

例如,下面是我为最新项目实现的error_messages方法

下面是一个示例,它将输出ul/li中带有一些自定义样式的错误列表。。。 只需自定义此项并将表单生成器放入应用程序/帮助程序中

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

无需显示/渲染另一部分。仅此而已:)。

如果您想在部分中显示任何内容(包括错误消息),您有两种方法

1-在调用分部的控制器操作中定义它 2-将消息作为参数传递给部分

render :partial => “<partial name>”, :locals => { :param1 => “value”}

<partial name> – name of your partial (Ex /partials/footer)

:params1 – parameter name

“value” – value
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
render:partial=>,:locals=>{:param1=>“value”}
–您的分部名称(前/分部/页脚)
:params1–参数名称
“价值”——价值
希望这有帮助

谢谢


sameera

您好,谢谢您的回答,我不是想在部分中显示验证错误,只是表单本身是在部分中,我只是想以简单/标准的方式显示验证错误。我不确定我是否完全理解您的方法,但它仍然需要将表单部分呈现给dsiplay此自定义消息,我被卡住了,因为我无法做到这一点…我不理解您的问题。您的意思是,您的所有表单都是部分表单,您希望在其他地方访问验证错误?请将你的主页和你的表格部分粘贴。谢谢。我已经编辑了原始帖子以包含更多细节。谢谢