2014-06-12 33 views
1

我正在關注我的學校的Ruby on Rails教程。我非常仔細地遵循了這些說明,但我遇到了一個錯誤。當我執行localhost:3000/books時,我的web界面工作正常(這導致我看到我的書籍條目的數據庫,這是我使用Firefox SQL管理器添加的)。但是,當我點擊「新書」,通過網頁界面進行新的輸入時,我得到: BooksController中的SyntaxError#new可能很簡單。 Ruby on rails使用網絡界面時的錯誤

(注意:當我做localhost:3000/publisher/new時,它工作正常。當我做localhost:3000/authors/new時,它不起作用,我希望當我修復Book的問題時,Author的問題將得到解決。以下所有信息都是關於我的書籍的一部分。項目)

c:/Sites/Summer_2014/BookManager/app/models/author.rb:4: syntax error, unexpected ':', expecting keyword_end validates_presence_of : :first_name, :last_name^

這是應用程序跟蹤:

app/views/books/_authors_checkboxes.html.erb:2:in `_app_views_books__authors_checkboxes_html_erb__770955296_43280532' 
app/views/books/_form.html.erb:26:in `block in _app_views_books__form_html_erb___935905997_43301772' 
app/views/books/_form.html.erb:1:in `_app_views_books__form_html_erb___935905997_43301772' 
app/views/books/new.html.erb:3:in `_app_views_books_new_html_erb___378444391_43261320' 

下面是代碼,我認爲相關的部分:

應用程序/視圖/書籍/ _authors_checkboxes.html.erb:

<p> 
    <% for author in Author.alphabetical %> 
     <%= check_box_tag "book[author_ids][]", author.id, @book.authors.include?(author) %> 
     <%= author.name %> 
     <br /> 
    <% end %> 
</p> 

應用程序/視圖/書籍/ _form.html.erb:

<%= form_for(@book) do |f| %> 
    <% if @book.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2> 

     <ul> 
     <% @book.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 
    <div class="field"> 
    <%= f.label :year_published %><br> 
    <%= f.number_field :year_published %> 
    </div> 
    <div class="field"> 
    <%= f.label :publisher_id %><br> 
    <%= f.collection_select :publisher_id, Publisher.alphabetical, :id, :name, :prompt => 'Please select a publisher' %> 
    </div> 
    <%= render partial: 'authors_checkboxes' %> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

應用程序/視圖/書籍/ new.html.erb:

<h1>New book</h1> 

<%= render 'form' %> 

<%= link_to 'Back', books_path %> 

編輯:這是我的一個PPS /模型/ author.rb:

class Author < ActiveRecord::Base 
    has_many :book_authors 
    has_many :books, through: :book_authors 
    validates_presence_of : :first_name, :last_name 
    scope :alphabetical, -> {order('last_name, first_name')} 

    def name 
     "#{last_name}, #{first_name}" 
    end 
end 
+1

您有一個指向您的作者模型的語法錯誤。你的作者模型代碼在哪裏? – Snarf

+0

感謝您的評論,我將它添加到底部。 :) – Sophtware

+0

不要以爲你應該有一個'validates_presence_of'和':'之間的空格,該行應該是 'validates_presence_of :: first_name,:last_name' – MCBama

回答

0

ruby編譯器是在這一個異常清晰的,沒想到在author.rb您孤:上線4.顯然是無效的紅寶石,你應該遵循docs for validates_presence_of 。該行應該簡單地說

validates_presence_of :first_name, :last_name