これについては多くの質問がありましたが、どれも役に立たないようです。そして、はい、私はこのレールがキャストされるのを見てきました。
私には、次のように多くの本を持っている著者がいます。
著者:
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をフォームに入れました-それでも役に立ちません。
助けてくれてありがとう!