我自己写了一个表单的修改验证,为什么验证信息不能提示呢?
我想要的效果
Form的代码
<%=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的代码
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的代码
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
<%=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>
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
flash[:notice]="error"
render :action=> "region_form"
flash[:notice]="error"
redirect_to :action=> "region_form",:id=region_id
你的region_save控制器,应该把region改成@region
渲染的页面只能访问实例变量,不能访问局部变量
你需要在view中增加:
[code="erb"]
<%= error_messages_for :region %>
[/code]
或者
[code="erb"]
<%= error_message_on :region, :name %>
[/code]
具体用法参考rails api