简体   繁体   English

RoR指南第6章不断获取语法错误,出现意外的tIDENTIFIER,期望出现keyword_end(SyntaxError

[英]RoR Tutorial Chapter 6 keep getting syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError

I keep getting the following error: 我不断收到以下错误:

syntax error, unexpected tIDENTIFIER, expecting keyword_end (SyntaxError)

    from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `block in load'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:236:in `load_dependency'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/activesupport-3.2.3/lib/active_support/dependencies.rb:245:in `load'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `block in load_spec_files'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `map'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/configuration.rb:746:in `load_spec_files'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/command_line.rb:22:in `run'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:69:in `run'
        from /Users/shazias/.rvm/gems/ruby-1.9.3-p194/gems/rspec-core-2.10.1/lib/rspec/core/runner.rb:10:in `block in autorun'

here is my user.rb file: 这是我的user.rb文件:

    class User < ActiveRecord::Base
    attr_accessible :name, :email

    email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i

   validates :name,  :presence => true,
                    :length   => { :maximum => 50 }
   validates :email, :presence => true,
                    :format   => { :with => email_regex },
                    :uniqueness => { :case_sensitive => false}
   end

    and my user_spec.rb file: 

       require 'spec_helper'

    describe User do



before(:each) do
    @attr = { :name => "Example User", :email => "user@example.com" }
  end

  it "should create a new instance given valid attributes" do
    User.create!(@attr)
  end

  it "should require a name" do
      no_name_user = User.new(@attr.merge(:name => ""))
      no_name_user.should_not be_valid
  end

  it "should require an email address" do
        no_email_user = User.new(@attr.merge(:email => ""))
        no_email_user.should_not be_valid
  end

  it "should reject names that are too long" do
          long_name = "a" * 51
          long_name_user = User.new(@attr.merge(:name => long_name))
          long_name_user.should_not be_valid
  end

  it "should accept valid email addresses" do
            addresses = %w[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
            addresses.each do |address|
              valid_email_user = User.new(@attr.merge(:email => address))
              valid_email_user.should be_valid
  end
 end 
  it "should reject invalid email addresses" do
              addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
              addresses.each do |address|
                invalid_email_user = User.new(@attr.merge(:email => address))
                invalid_email_user.should_not be_valid
  end
 end
  it "should reject duplicate email addresses" do
    #Put a user with given email address into the database. 
    User.create! (@attr)
    user_with_duplicate_email = User.new (@attr)
    user_with_duplicate_email.should_not be_valid
  end
end
  it "should reject email addresses identical up to case" do
    upcased_email = @attr [:email].upcase
    User.create! (@attr.merge(:email => upcased_email))
    user_with_duplicate_email = User.new (@attr),
    user_with_duplicate_email.should_not be_valid
  end
end

I'm literally at my wits end..My test keeps failing after I add this part of code to the user_spec.rb file (before adding and/or deleting this section of code my tests pass): 我实际上是机智的。在将这部分代码添加到user_spec.rb文件中之后(在添加和/或删除此部分代码之前,我的测试通过),我的测试始终失败:

    it "should reject email addresses identical up to case" do
    upcased_email = @attr [:email].upcase
    User.create! (@attr.merge(:email => upcased_email))
    user_with_duplicate_email = User.new (@attr),
    user_with_duplicate_email.should_not be_valid
  end
end

Any help is greatly appreciated, thanks!! 任何帮助,不胜感激,谢谢!

Directly above this line: 在这条线的正上方:

it "should reject email addresses identical up to case" do

You have an extra end statement in there. 您在那里有一个额外的end声明。 That statement should probably be moved to the end of the file. 该语句可能应该移到文件末尾。

you using ruby 1.9.3 您使用Ruby 1.9.3

in your validation replace: => with : 在您的验证中: =>替换为

validates :name,  presence: true, length: { maximum: 50 }
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }

You have many extra ENDs ... 您还有许多额外的ENDs ...

When you open a do , like it "should something" do you need to close the open do with an end : 当您打开一个do ,就像it "should something" do您需要以一个end来关闭open do

it "should something" do
  ...
end

However you are closing it twice in some cases: 但是,在某些情况下,您将其关闭两次:

it "should something" do
  ...
end
end

Your revised code should be: 您修改后的代码应为:

require 'spec_helper'

describe User do
  before(:each) do
  @attr = { :name => "Example User", :email => "user@example.com" }
end

it "should create a new instance given valid attributes" do
  User.create!(@attr)
end

it "should require a name" do
  no_name_user = User.new(@attr.merge(:name => ""))
  no_name_user.should_not be_valid
end

it "should require an email address" do
  no_email_user = User.new(@attr.merge(:email => ""))
  no_email_user.should_not be_valid
end

it "should reject names that are too long" do
  long_name = "a" * 51
  long_name_user = User.new(@attr.merge(:name => long_name))
   long_name_user.should_not be_valid
end

it "should accept valid email addresses" do
  addresses = %w[user@foo.com THE_USER@foo.bar.org first.last@foo.jp]
  addresses.each do |address|
  valid_email_user = User.new(@attr.merge(:email => address))
  valid_email_user.should be_valid
end

it "should reject invalid email addresses" do
  addresses = %w[user@foo,com user_at_foo.org example.user@foo.]
  addresses.each do |address|
  invalid_email_user = User.new(@attr.merge(:email => address))
  invalid_email_user.should_not be_valid
end
it "should reject duplicate email addresses" do
  #Put a user with given email address into the database. 
  User.create! (@attr)
  user_with_duplicate_email = User.new (@attr)
  user_with_duplicate_email.should_not be_valid
end

it "should reject email addresses identical up to case" do
  upcased_email = @attr [:email].upcase
  User.create! (@attr.merge(:email => upcased_email))
  user_with_duplicate_email = User.new (@attr),
  user_with_duplicate_email.should_not be_valid
end

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM