0

Rails ガイド ( http://guides.rubyonrails.org/getting_started.html ) に取り組んでいますが、項目 11「マルチ モデル フォームの構築」で行き詰まっています。

演習のこの部分では、あるモデルのフォーム フィールドを別のモデルのフォーム内に含めることについて説明します...

新規投稿/編集投稿のエラー: nil:NilClass の未定義メソッド「fields_for」

Extracted source (around line #2):

1: <% @post.tags.build %>
2: <%= form.fields_for :tags do | tag_form | %>
3:   <div class="field">
4:     <%= tag_form.label :name, 'Tag: ' %>
5:     <%= tag_form.text_field :name %>

コードは演習とまったく同じです (私は必死になって、サンプルからコードを直接コピーして貼り付けました)。

私のコードは以下に掲載されています..これをガイドのコードと比較するのに何時間も費やしましたが、まったく同じです..誰かが間違っている可能性があることを指摘できますか?

よろしくお願いします。

部分を含めるための私のコードは次のとおりです

モデル/post.rb:

class Post < ActiveRecord::Base
  attr_accessible :content, :name, :title, :tags_attributes

  validates :name, :presence =>true
  validates :title, :presence =>true,
                        :length => { :minimum => 5 }
  has_many :comments, :dependent => :destroy
  has_many :tags

  accepts_nested_attributes_for :tags, :allow_destroy => :true,
    :reject_if => proc { |attrs| attrs.all? { |k, v| v.blank? } }
end

モデル/tag.rb:

class Tag < ActiveRecord::Base
  belongs_to :post
  attr_accessible :name
end

投稿/_form.html.erb:

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

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

  <div class="field">
    <%= post_form.label :name %><br />
    <%= post_form.text_field :name %>
  </div>
  <div class="field">
    <%= post_form.label :title %><br />
    <%= post_form.text_field :title %>
  </div>
  <div class="field">
    <%= post_form.label :content %><br />
    <%= post_form.text_area :content %>
  </div>
  <h2>Tags</h2>
  <%= render :partial => 'tags/form',
                     :locals => {:from => post_form} %>
  <div class="actions">
    <%= post_form.submit %>
  </div>
<% end %>

tags/_form.html.erb:

<%= form.fields_for :tags do | tag_form | %>
  <div class="field">
    <%= tag_form.label :name, 'Tag: ' %>
    <%= tag_form.text_field :name %>
  </div>
  <% unless tag_form.object.nil?  || tag_form.object.new_record? %>
    <div class="field">
      <%= tag_form.label :_destroy, 'Remove: ' %>
      <%= tag_form.check_box :_destroy %>
    </div>
  <% end %>
<% end %>
4

2 に答える 2

2

投稿/_form の末尾付近のタイプミス

<%= render :partial => 'tags/form', :locals => {:from => post_form} %>

する必要があります

<%= render :partial => 'tags/form', :locals => {:form => post_form} %>

フォームではない!!!

于 2013-02-27T16:23:06.207 に答える
0

フォームのスペルが間違っています。

:locals => {:from => post_form}:locals => {:form => post_form}

于 2013-02-27T16:24:39.257 に答える