对此有很多问题,但似乎都没有帮助。是的,我看过这个铁轨演员。
我有一个作者有很多书,像这样:
作者:
class Author < ActiveRecord::Base
attr_accessible :name
has_many :books, dependent: :destroy
accepts_nested_attributes_for :books, allow_destroy: true
validates :name, presence: true
validates :name, length: { minimum: 3 }
end
书:
class Book < ActiveRecord::Base
attr_accessible :name, :year
belongs_to :author
validates :name, :year, presence: true
validates :year, numericality: { only_integer: true, less_than_or_equal_to: Time.now.year }
end
我创建了以下表单来将一本书添加到 authors#show 中的作者:
<%= form_for([@author, @book], html: { class: "well" }) do |f| %>
<% if @book.errors.any? %>
<div class="alert alert-block">
<ul>
<% @author.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
#labels and buttons...
<% end %>
...使用以下 authors_controller 方法:
def show
@author = Author.find(params[:id])
@book = @author.books.build
end
...以及以下 books_controller 方法:
def create
@author = Author.find(params[:author_id])
if @author.books.create(params[:book])
redirect_to author_path(@author)
else
render action: :show
end
end
我似乎无法弄清楚为什么表单不显示任何错误消息。我遵循了 railscasts 中的示例,他们说表单中应该有书籍的实例变量而不是 @author.books.build,所以我将后者放在控制器中,将 @book 放在表单中 - 仍然无济于事。
谢谢你的帮助!