Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails验证问题_Ruby On Rails_Model_Validation - Fatal编程技术网

Ruby on rails Rails验证问题

Ruby on rails Rails验证问题,ruby-on-rails,model,validation,Ruby On Rails,Model,Validation,好的,所以我对RubyonRails还是个新手。我正在使用InstantTrails,如果这有什么不同的话 这是我的问题-我正在尝试验证表单中的一些条目。如果我在没有任何验证的情况下使用表单,那么它可以正常工作。如果我添加验证,它将完全改变应用程序的行为,并且不起作用 例如,如果我输入数据(没有验证),表单按钮使用create方法提交数据,该方法将用户重定向回索引。(当表单为时)索引上还列出了在某一点或另一点输入表单的所有内容,因此用户可以看到他们最近提交的内容已添加。(提交后,页面上也会显示一

好的,所以我对RubyonRails还是个新手。我正在使用InstantTrails,如果这有什么不同的话

这是我的问题-我正在尝试验证表单中的一些条目。如果我在没有任何验证的情况下使用表单,那么它可以正常工作。如果我添加验证,它将完全改变应用程序的行为,并且不起作用

例如,如果我输入数据(没有验证),表单按钮使用create方法提交数据,该方法将用户重定向回索引。(当表单为时)索引上还列出了在某一点或另一点输入表单的所有内容,因此用户可以看到他们最近提交的内容已添加。(提交后,页面上也会显示一条闪光消息)

但是,如果我做同样的事情,只在模型中对验证进行未注释,数据库中不会存储任何内容,Rails不会重定向到索引,而是尝试将使用重定向到不存在的create页面

下面是我的控制器、模型和视图的相关部分,以及两个场景的Rails日志

控制器

def index
    @page_subtitle = "Manage Members"
    @contacts      = Directory.find(:all)
end

def edit
    @page_subtitle = "Edit entries"
end

def create
    @contact       = Directory.new(params[:contact])
    if @contact.save
        flash[:notice] = 'Contact was successfully added.'
        redirect_to :action => "index"
    end
end
型号

class Directory < ActiveRecord::Base
validates_presence_of :fname, :lname, :number
validates_numericality_of :number
validates_uniqueness_of :number
validates_length_of :number, :within => 7..10, :message => "Please enter a telephone number that is 7 to 10 digits long. If you require a longer number, please contact support."
end
日志(模型中的验证、已损坏的应用程序)


感谢您所能给予的一切帮助

我可以猜到
验证
的唯一性失败,这意味着
@contact.save
返回false,因为您没有告诉Rails在这种情况下使用什么模板,所以它使用的是默认模板,与action同名。

我可以猜
验证
的唯一性失败,这意味着
@contact.save
返回false,因为您没有告诉Rails在这种情况下使用什么模板,所以它使用的是默认模板,与action同名。

@contact.save
返回false,因为验证失败。您的
create
操作没有明确说明在这种情况下要呈现什么,因此Rails试图呈现它认为您需要的内容,即以您的操作命名的模板:
create.html.erb

传统的做法是重新提交新模板,以便用户能够解决问题

def create
  @contact = Directory.new(params[:contact])
  if @contact.save
    flash[:notice] = 'Contact was successfully added.'
    redirect_to :action => "index"
  else
    # validation failed, so give the user a chance to fix it
    render :action => "new"
  end
end

@contact.save
返回false,因为验证失败。您的
create
操作没有明确说明在这种情况下要呈现什么,因此Rails试图呈现它认为您需要的内容,即以您的操作命名的模板:
create.html.erb

传统的做法是重新提交新模板,以便用户能够解决问题

def create
  @contact = Directory.new(params[:contact])
  if @contact.save
    flash[:notice] = 'Contact was successfully added.'
    redirect_to :action => "index"
  else
    # validation failed, so give the user a chance to fix it
    render :action => "new"
  end
end
Processing DirectoriesController#create (for 127.0.0.1 at 2009-10-07 23:08:29) [POST]
Session ID: BAh7BzoMY3NyZl9pZCIlODkwZWVmNzgxYzdlZmUxYjdiNWRjNjZiMWYxNGMw%0AMDkiCmZsYXNoSUM6J0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhh%0Ac2h7AAY6CkB1c2VkewA%3D--043c05ff742c224f3bbc27db8bd8330b0b962740
Parameters: {"commit"=>"Add Member", "contact"=>{"number"=>"8641234567", "lname"=>"Timms", "fname"=>"John"}, "authenticity_token"=>"467d6a642f0171a166ee093ec05bdef86ba009ac", "action"=>"create", "controller"=>"directories"}
[4;36;1mDirectory Columns (0.003000)[0m   [0;1mSHOW FIELDS FROM `directories`[0m
[4;35;1mSQL (0.001000)[0m   [0mBEGIN[0m
[4;36;1mDirectory Load (0.001000)[0m   [0;1mSELECT * FROM `directories` WHERE (directories.number = '8641234567') LIMIT 1[0m
[4;35;1mSQL (0.000000)[0m   [0mCOMMIT[0m
Rendering template within layouts/application
Rendering directories/create
Completed in 0.02000 (50 reqs/sec) | Rendering: 0.00400 (20%) | DB: 0.00500 (25%) | 200 OK [http://127.0.0.1/directories/create]
def create
  @contact = Directory.new(params[:contact])
  if @contact.save
    flash[:notice] = 'Contact was successfully added.'
    redirect_to :action => "index"
  else
    # validation failed, so give the user a chance to fix it
    render :action => "new"
  end
end