Итак, я новичок в Ruby on Rails и создал два класса: класс контроллера Author и класс контроллера Book. У авторов есть книги, и каждая книга связана с автором.
Модель автора
class Author < ActiveRecord::Base
has_many :books
validates_presence_of :genres
validates_presence_of :name
end
Модель книги
class Book < ActiveRecord::Base
#Validations
validates_presence_of :review
validates_presence_of :title
#Associations
belongs_to :author
end
Но когда я пытаюсь добавить автора, в текстовом поле «Книга» уже есть что-то внутри.
ТЕКСТОВОЕ ПОКРЫТИЕ
#<ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Book:0x007fc715555eb8>
Я особенно сбит с толку, потому что я не редактировал ни единого бита шаблона, созданного new.html.erb для класса автора, — это напрямую от рендеринга «формы», которую я тоже не трогал, и поэтому я не даже уверен, где это и что происходит не так.
Автор _form.html.erb
<%= form_for(@author) do |f| %>
<% if @author.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@author.errors.count, "error") %> prohibited this author from being saved:</h2>
<ul>
<% @author.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :genres %><br>
<%= f.text_field :genres %>
</div>
<div class="field">
<%= f.label :books %><br>
<%= f.text_field :books %>
</div>
<div class="actions">
<%= f.submit %>
</div>
И даже после того, как я заполнил данные и нажал «Отправить», это то, что отображается в моем терминале (я использую Postgresql для локального хоста)
ТЕРМИНАЛ
Started POST "/authors" for 127.0.0.1 at 2014-03-23 17:05:11 -0500
Processing by AuthorsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"LdpFtn0Tni9Qyu7jg3Zk3I3n+5EzCUeXelyifJhV460=", "author"=>{"name"=>"Harper Lee", "genres"=>"Fiction", "books"=>"To Kill A Mockingbird"}, "commit"=>"Create Author"}
Completed 500 Internal Server Error in 2ms
NoMethodError (undefined method `each' for "To Kill A Mockingbird":String):
app/controllers/authors_controller.rb:27:in `create'
Rendered /Users/Acorn/.rvm/gems/ruby-2.0.0-p353@librarydata/gems/actionpack-4.0.3/lib/action_dispatch/middleware/templates/rescues/_source.erb (22.0ms)
Rendered /Users/Acorn/.rvm/gems/ruby-2.0.0-p353@librarydata/gems/actionpack-4.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
Rendered /Users/Acorn/.rvm/gems/ruby-2.0.0-p353@mlibrarydata/gems/actionpack-4.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.9ms)
Rendered /Users/Acorn/.rvm/gems/ruby-2.0.0-p353@librarydata/gems/actionpack-4.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (35.7ms)
Это сбивает с толку, потому что у меня нет функции «каждого», о которой я знаю.
функция создания authors_controller.rb
# POST /authors
# POST /authors.json
def create
@author = Author.new(author_params)
respond_to do |format|
if @author.save
format.html { redirect_to @author, notice: 'Author was successfully created.' }
format.json { render action: 'show', status: :created, location: @author }
else
format.html { render action: 'new' }
format.json { render json: @author.errors, status: :unprocessable_entity }
end
end
end
Я предполагаю, что что-то идет не так в книжном классе? Как это исправить?
Заранее спасибо!!