2013-02-27 3 views
0

Я буду работать через Rails Guides (http://guides.rubyonrails.org/getting_started.html),and я застрял в пункте 11 „Построение формы несколько Модели“Рубин на Руководстве Rails: неопределенный метод `fields_for» для ноля: NilClass

Эта часть физических упражнений объясняет. о включении полой формы для одной модели внутри формы другого ...

ошибки на Новом/Редактировать сообщение: неопределенного метода `fields_for» для ноля: NilClass

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 %> 

теги/_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 %> 
+1

опечатка здесь? ': locals => {: from => post_form}' – mikej

+0

при поиске в google, одно предложение использовать form_for вместо form.fields_for, но таким образом выполнялся рендеринг, но после него не было сообщений после создания или обновления – user2116155

ответ

0

Форма с ошибкой.

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

2

Просто опечатка в конце вашего поста/_form

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

должен быть

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

форма нет из !!!

Смежные вопросы