2013-05-23 2 views
1

Я работаю над учебником Майкла Хартла. Я нахожусь в Главе 6. Я до проверки пользователя. Ниже приведен код, который мне сказали использовать, но он не работает. Я получаю сообщение об ошибке syntax error, unexpected end-of-input, expecting keyword_end (SyntaxError). Я не вижу синтаксическую ошибку. Какие-либо предложения?Учебник Michael Hartl Глава 6 - Ошибка синтаксиса

require 'spec_helper' 

describe User do 
    before do 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 
    subject { @user } 
    it { should respond_to(:name) } 
    it { should respond_to(:email) } 
    it { should respond_to(:password_digest) } 
    it { should be_valid } 

    describe "when name is not present" do 
    before { @user.name = " " } 
    it { should_not be_valid } 
    end 
    describe "when email is not present" do 
    before { @user.email = " " } 
    it { should_not be_valid } 
    end 
    describe "when name is too long" do 
    before { @user.name = "a" * 51 } 
    it { should_not be_valid } 
    end 
    describe "when email format is invalid" do 
    it "should be invalid" do 
     addresses = %w[[email protected],com user_at_foo.org [email protected] 
        [email protected]_baz.com [email protected]+baz.com] 
     addresses.each do |invalid_address| 
     @user.email = invalid_address 
     @user.should_not be_valid 
     end 

    describe "when email format is valid" do 
    it "should be valid" do 
     addresses = %w[[email protected] [email protected] [email protected] [email protected]] 
     addresses.each do |valid_address| 
     @user.email = valid_address 
     @user.should be_valid 
     end 

    describe "when email address is already taken" do 
    before do 
     user_with_same_email = @user.dup 
     user_with_same_email.email = @user.email.upcase 
     user_with_same_email.save 
    end 
    it { should_not be_valid } 
    end 
end 
+6

Вам действительно нужно работать над форматированием вашего кода. Объедините все, чтобы сделать их доступными для чтения, и вы сможете найти свой недостающий «конец» –

+1

@nickm: Я думаю, вы должны прекратить эту деятельность (добавив тег). Аналогичный тег обсуждался на [meta] (https://meta.stackoverflow.com/questions/294548/derail-railstutorial-org) некоторое время назад. –

+0

Достаточно справедливо @ Сержио Туленцев –

ответ

0
require 'spec_helper' 

describe User do 
    before do 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 
    subject { @user } 
    it { should respond_to(:name) } 
    it { should respond_to(:email) } 
    it { should respond_to(:password_digest) } 
    it { should be_valid } 

    describe "when name is not present" do 
    before { @user.name = " " } 
    it { should_not be_valid } 
    end 
    describe "when email is not present" do 
    before { @user.email = " " } 
    it { should_not be_valid } 
    end 
    describe "when name is too long" do 
    before { @user.name = "a" * 51 } 
    it { should_not be_valid } 
    end 
    describe "when email format is invalid" do 
    it "should be invalid" do 
     addresses = %w[[email protected],com user_at_foo.org [email protected] 
        [email protected]_baz.com [email protected]+baz.com] 
     addresses.each do |invalid_address| 
     @user.email = invalid_address 
     @user.should_not be_valid 
     end 
    end # you've missed it 
    end # and this one 

    describe "when email format is valid" do 
    it "should be valid" do 
     addresses = %w[[email protected] [email protected] [email protected] [email protected]] 
     addresses.each do |valid_address| 
     @user.email = valid_address 
     @user.should be_valid 
     end 
    end # 
    end # and two more  

    describe "when email address is already taken" do 
    before do 
     user_with_same_email = @user.dup 
     user_with_same_email.email = @user.email.upcase 
     user_with_same_email.save 
    end 
    it { should_not be_valid } 
    end 
end 
4

Я рекомендую вам отступа кода, таким образом, это будет гораздо более очевидным, где end ключевые слова должны идти (и вы увидите сразу, что вам не хватает одного). (Hartl делает на протяжении всей книги.)

Например:

require 'spec_helper' 
describe User do 
    before do 
    @user = User.new(name: "Example User", email: "[email protected]") 
    end 
    subject { @user } 
    it { should respond_to(:name) } 
    it { should respond_to(:email) } 
    it { should respond_to(:password_digest) } 
    it { should be_valid } 
    describe "when name is not present" do 
    before { @user.name = " " } 
    it { should_not be_valid } 
    end 
end 

Если отступы не совпадает в любом месте, он должен выскочить у вас, то вы будете знать, что есть проблема.

+0

Спасибо большое ... – user2415183

0

В Ruby, do .. end указывает блок. Это выглядит так:

... do 

.. Some Code Here ... 

end 

Вы должны отступать от своего кода и лучше смотреть на недостающий конец.

В целом, это соглашение в Ruby, чтобы использовать 2 пробела или символ табуляции длиной 2 пробела для отступов кода.

+0

Спасибо большое ... – user2415183

Смежные вопросы