horace_lee 2009-02-16 10:58
浏览 187
已采纳

可以问个新手问题吗-Rails为什么不显示验证信息

我自己写了一个表单的修改验证,为什么验证信息不能提示呢?
我想要的效果

 

Form的代码

Html代码 复制代码
<%=form_tag({:action=>"region_save" , :id=>@region.id}) %>
<table class="datatable" width='90%'>
<tr bgcolor='#BFBFD2'><td colspan='2' style="valign:middle;"><h2>Region</h2></td></tr>
<tr><td>Region Name:</td><td><%= text_field("region","name") %></td></tr>
<tr bgcolor='#FFFCDF'><td>Region IP:</td><td><%= text_field("region","ip")%></td></tr>
<tr><td colspan='2'><%=submit_tag %></td></tr>
</table>
</form>

Controller的代码

Ruby代码 复制代码

  def region_save
    region_id=params[:id]
    region_name=params[:region][:name]
    region_ip=params[:region][:ip]
    if (region_id.nil?)
      region=Region.new()
    else
      region=Region.find(region_id)
    end
    region[:name]=region_name
    region[:ip]=region_ip
    region.save()
    redirect_to :action => "region_list"    
  end

  Model的代码

Ruby代码 复制代码
class Region < ActiveRecord::Base
  validates_uniqueness_of :name
  validates_uniqueness_of :ip
  validates_presence_of   :name,
                          :message=>"Please input a name to region."
  validates_format_of     :ip,
                          :with => /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,
                          :message=>"Please input a right format of ip address."
end

 


问题补充:
我刚才按照night_stalker说的,修改了代码,加上了err_message的输出,怎么还是没有提示信息啊。


代码整理如下:
View部分

<%=form_tag({:action=>"region_save" , :id=>@region.id}) %>
<%= error_messages_for 'region' %>
<table class="datatable" width='90%'>
<tr bgcolor='#BFBFD2'><td colspan='2' style="valign:middle;"><h2>Region</h2></td></tr>
<tr><td>Region Name:</td><td><%= text_field("region","name") %></td></tr>
<tr bgcolor='#FFFCDF'><td>Region IP:</td><td><%= text_field("region","ip")%></td></tr>
<tr><td colspan='2'><%=submit_tag %></td></tr>
</table>
</form>

Controller部分:
输入正确可以保存则跳往region.list,错误则render会form表单

def region_form
@region=nil
if (params.key?(:id)) && !params[:id].nil?
id=params[:id]
@region=Region.find(id)
end
if @region.nil?
@region=Region.new()
end
end
def region_save
region_id=params[:id]
region_name=params[:region][:name]
region_ip=params[:region][:ip]
if (region_id.nil?)
region=Region.new()
else
region=Region.find(region_id)
end
region[:name]=region_name
region[:ip]=region_ip
if region.save()
redirect_to :action => "region_list"
else
flash[:notice]="error"
render :action=> "region_form"
end

end


Model没有变见上图

现在的,问题是
<%= error_messages_for 'region' %>的错误信息没有在页面显示。
之前输入的表单内容也没有。更没有哪个输入错误的红色框。
再帮忙看看吧
问题补充:
如果,修改controller里的跳转


flash[:notice]="error"

render :action=> "region_form"

改成

flash[:notice]="error"

redirect_to :action=> "region_form",:id=region_id

表单内容,倒是出来了,flash[:notice]的error也出来了。可是,model的错误信息没有出来,而且,也没有添错的错误框。

怎么看都是最基本的问题,谁给指条明路,从那看起可以解决这个问题啊
  • 写回答

2条回答 默认 最新

  • xenocide 2009-02-16 17:27
    关注

    你的region_save控制器,应该把region改成@region

    渲染的页面只能访问实例变量,不能访问局部变量

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?