render :partial 验证的问题

问题描述

尝试做做,试着完善 Rolling with Rails 2.0 - The First Full Tutorial 这篇文章的code,遇到一个问题,请教下在显示blog内容页面下面采用:<%= render :partial => @comment = Comment.new, :locals => { :button_name => 'Create'}%>局部模板到_comment.rhtml<% form_for([@post, @comment]) do |f| %><%= error_messages_for :comment%><p><%= f.text_field :author%><label for="author"><small>您的大名</small></label></p><p><%= f.text_field :email%><label for="email"><small>Mail</small></label></p><p><%= f.text_area :body,:id=>'comment',:cols=>'60',:rows=>'10',:tabindex=>'4'%></p><p><input name="button_name" type="image" src="/images/submit.png" id="submit" tabindex="5" value="SubmitComment" /></p><% end %>comment_controller中:format.html { redirect_to(@post, @comment) }跳转到post show的页面去,这个时候验证怎么办?在model/comment.rb中:validates_presence_of :body,:on => :create,:message =>"请填写内容!" validates_format_of :email,:on => :create,:message => "Email格式不正确!",:with => /A([^@s]+)@((?:[-a-z0-9]+.)+[a-z]{2,})Z/i问题补充:_comment.rhtml内容:<div name="form"><% form_remote_for([@post, @comment]) do |f| %> <span id='markerror' style='display:none;color:red;'>提示错误</span><p><%= f.text_field :author%><label for="author"><small>您的大名</small></label></p><p><%= f.text_field :email%> <label for="email"><small>Mail</small></label></p><p><%= f.text_area :body,:id=>'comment',:cols=>'60',:rows=>'10',:tabindex=>'4'%></p><p><input name="button_name" type="image" src="/images/submit.png" id="submit" tabindex="5" value="SubmitComment" /></p><% end %></div>=========================================comment_controller的create方法:def create @comment = @post.comments.build(params[:comment]) respond_to do |format|format.js doif @comment.saverender :update do |page|page.insert_html :bottom,'comments',:partial => 'comment',:object => @commentpage['markerror'].hide()endelserender :update do |page|page['markerror'].update @comment.errors.full_messages;endendend end=========================================views/posts/show.html.erb改为:<%= render :partial => @comment = Comment.new%> =========================================现在点击comment提交按钮没有任何反应,还望指点迷津问题补充:========================================================================================================================================================仔细检查改进后,现在出现的情况是后台提示如下,但是页面上却没有ajax提示出来:========================================================================================================================================================ActiveRecord::RecordInvalid (Validation failed: Body 请填写内容!, Email Email格式不正确!): D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/validations.rb:913:in `save_without_dirty!' D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/dirty.rb:83:in `save_without_transactions!' D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/transactions.rb:110:in `save!' D:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.0/lib/active_record/connection_adapters/abstract/database_statements.rb:66:in `transaction'============================================================================<p id="markerror" style='display:none;color:red;'>提示错误</p><p id="notice" style="color: green"><%= flash[:notice] %></p><h3>发表回复:</h3><%= render :partial => @comment = Comment.new%>============================================================================<div id="new_comment_from"><% form_remote_for :comment, :url=>{:controller=>'comments',:action=>'create'}, :html => { :id => 'new_comment' } do |f| %><%= f.hidden_field :post_id,:value=>@post.id%><p><%= f.text_field :author%><label for="author"><small>您的大名</small></label></p><p><%= f.text_field :email%> <label for="email"><small>Mail</small></label></p><p><%= f.text_area :body,:id=>'comment',:cols=>'60',:rows=>'10',:tabindex=>'4'%></p><p><input name="button_name" type="image" src="/images/submit.png" id="submit" tabindex="5" value="SubmitComment" /></p><% end %></div>============================================================================

解决方案

验证会在创建comment的时候自动验证,如果有错会把相关message加入到comment.errors中.与跳到到哪没关系。你可以更改跑转到显示blog的页面。在那个页面中<%= error_messages_for :comment%>意思就是把comment.errors的错误修信息显示出来。一般楼主的这种需录用RJS更加方便。在显示blog内容:<%= render :partial => "comment/form",:locals => { :button_name => 'Create'}%> _comment.rhtml :<% form_remote_for([@post, @comment]) do |f| %> comment_controller:respond_to do |format| format.js do if @comment.save render :update do |page| page.insert_html :bottom,'commentss',:partial => 'comment',:object => @comment end else render :update do |page| page['error'].update @comment.errors.full_messages; end end end end

时间: 2024-10-24 20:33:42

render :partial 验证的问题的相关文章

怎么样用render :partial 实现div的内嵌套循环

问题描述 这个是我的代码,但不能实现在"content"中的div循环管<div id = "content"> <%for @order in @orders %> <div class= "order_dish" id = "<%=@order.user_id%>_<%=@order.dish_id%>"> <%@dish = Dish.find(@orde

Ajax 表单验证实现代码

   兼容: opera 9.6 + chrome 2.0 + FF 3 + IE 6  效果:一边输入一边实现验证  image  环境:ruby 1.8.6 + rails 2.1.0 + windows  核心代码:  html:  浏览器禁用javascript时显示提示信息:  复制代码 代码如下: <noscript>  <div style="color:red">您的浏览器不支持javascript,部分功能无法使用</div>  &

Ajax 表单验证 实现代码_AJAX相关

兼容: opera 9.6 + chrome 2.0 + FF 3 + IE 6 效果:一边输入一边实现验证  环境:ruby 1.8.6 + rails 2.1.0 + windows 核心代码: html: 浏览器禁用javascript时显示提示信息: 复制代码 代码如下: <noscript> <div style="color:red">您的浏览器不支持javascript,部分功能无法使用</div> </noscript>

Ajax 表单验证 实现代码

兼容: opera 9.6 + chrome 2.0 + FF 3 + IE 6 效果:一边输入一边实现验证   环境:ruby 1.8.6 + rails 2.1.0 + windows 核心代码: html: 浏览器禁用javascript时显示提示信息: 复制代码 代码如下: <noscript> <div style="color:red">您的浏览器不支持javascript,部分功能无法使用</div> </noscript>

Ruby rails 页面跳转(render和redirect_to)_ruby专题

Ruby代码 复制代码 代码如下: if @user.update_attributes(:password => params[:user][:password]) flash[:notice] = '密码修改完成' redirect_to :action => 'index' else redirect_to :action => 'change_pass', :id => @user end 后来随手改了下第5行,把redirect_to改为render,居然就OK了.网上找

partial只能显示find all查出来的记录?

问题描述 用partial显示@problems,代码如下 view: <%= render :partial => 'problem',:collection => @problems %> contoller: @problems=Problem.all --这时view正常显示出问题列表 contoller代码改成 @problems=Problem.find(:first) 或者其他查询条件 @problems=Problem.find_title("问题1&qu

深入理解Ruby on Rails中的缓存机制_ruby专题

几个场景 首先,让我先来带您浏览几个 ChangingThePresent.org 中的页面吧.我将显示站点中几个需要缓存的地方.然后,再指出我们为其中每个地方所做出的选择以及为实现这些页面所使用的代码或策略.尤其会重点讨论如下内容:     全静态页面     几乎无变化的全动态的页面     动态页面片段     应用程序数据 先来看看静态页面.几乎每个站点都会有静态页面,如图 1 所示,其中还有我们的条款和条件.可以通过单击 register 然后再选择是否接受用户协议来浏览相应页面.对于

Ruby on rails开发从头来(windows)(十四)-送货处理

在上次的内容里,我们完成了订单的编写.这次我们模拟一个简单的送货页面,给这个购物车的管理员用. 1.首先,我们修改order表,给他添加一个字段shipped_at: create table orders ( id int not null auto_increment, name varchar(100) not null, email varchar(255) not null, address text not null, pay_type char(10) not null, ship

举例理解Ruby on Rails的页面缓存机制_ruby专题

有了页面缓存,Rails 就可以不再介入.在某种程度上,这是件好事,因为您的确可以获得优秀的性能.Rails 只需创建 HTML 页面,将其放入目录,之后,就可以置之于脑后.从那时起,就由应用服务器管理这些页面,且页面进入应用服务器无需任何循环.从性能的角度而言,页面缓存真是天赐之福. 我也钟爱页面缓存,Rails 使之简单利落.只需使用一行代码就可以启用缓存.如果再加入一些代码,就能通过简单地删除文件操作或使用 Rails 较高层的 API 终止缓存.这里存在一个问题.并不是每个网站都能使用页