Ruby on rails 如何访问部分中的验证消息?
因此,每个rails项目我似乎都遇到了这个问题,如果有人能启发我,我将非常感激: 使用“正常”设置,当表单位于与url/控制器直接关联的视图上时,非常简单,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[]通过
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此自定义消息,我被卡住了,因为我无法做到这一点…我不理解您的问题。您的意思是,您的所有表单都是部分表单,您希望在其他地方访问验证错误?请将你的主页和你的表格部分粘贴。谢谢。我已经编辑了原始帖子以包含更多细节。谢谢