horace_lee
horace_lee
2009-02-16 10:58

可以问个新手问题吗-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 xenocide 12年前

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

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

    点赞 评论 复制链接分享
  • xenocide xenocide 12年前

    你需要在view中增加:

    [code="erb"]
    <%= error_messages_for :region %>
    [/code]
    或者
    [code="erb"]
    <%= error_message_on :region, :name %>
    [/code]

    具体用法参考rails api

    点赞 评论 复制链接分享

相关推荐