Наверное очень просто. Ошибка Ruby on rails при использовании веб-интерфейса

Я следую учебнику ruby ​​on rails моей школы. Я очень внимательно следовал инструкциям, но столкнулся с ошибкой. Мой веб-интерфейс отлично работает, когда я делаю localhost:3000/books (это приводит к тому, что я вижу свою базу данных моих записей о книгах, которую я добавил с помощью диспетчера SQL Firefox). Однако, когда я нажимаю «Новая книга», чтобы сделать новую запись через веб-интерфейс, я получаю: SyntaxError in BooksController#new

(ПРИМЕЧАНИЕ: когда я делаю localhost:3000/publisher/new, он работает нормально. Когда я делаю localhost:3000/authors/new, он не работает. Я надеюсь, что проблема с Author будет решена, когда я исправлю проблема с Book. Вся следующая информация относится к части книг моего проекта.)

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'

Вот части кода, которые я считаю важными:

app/view/books/_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 %>

РЕДАКТИРОВАТЬ: Вот мои приложения/модели/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

person Sophtware    schedule 12.06.2014    source источник
comment
У вас есть синтаксическая ошибка, указывающая на вашу модель Author. Где код вашей авторской модели?   -  person Snarf    schedule 13.06.2014
comment
Спасибо за комментарий, я добавил его внизу. :)   -  person Sophtware    schedule 13.06.2014
comment
Не думайте, что у вас должен быть пробел между validates_presence_of и :, эта строка должна быть validates_presence_of: :first_name, :last_name   -  person MCBama    schedule 13.06.2014
comment
Я внес изменения, но ошибка осталась прежней. :(   -  person Sophtware    schedule 13.06.2014
comment
УУУХУ. Я попытался удалить двоеточие, о котором вы говорили, и это сработало!   -  person Sophtware    schedule 13.06.2014
comment
ну так я был близок. ах, вот что я получаю за попытку ответить на лету xD. Я вижу, кому-то удалось получить правильный ответ, лол   -  person MCBama    schedule 13.06.2014


Ответы (1)


Компилятор ruby исключительно ясен в этом, он не ожидал вашего одиночного : в author.rb в строке 4. Это явно недопустимый ruby, и вы должны следовать документы для validates_presence_of. Строка должна просто сказать

validates_presence_of :first_name, :last_name
person Patru    schedule 12.06.2014