2014-02-10 2 views
0

Это то, что у меня есть:Почему моя вложенная форма вообще не появляется?

post.rb:

class Post < ActiveRecord::Base 
    has_many :replies, :dependent => :destroy 
    accepts_nested_attributes_for :replies, :allow_destroy => true 
end 

reply.rb:

class Reply < ActiveRecord::Base 
    belongs_to :post 
end 

сообщений/_reply_fields.html.erb:

<p> 
    <%= f.label :content, "Reply" %><br /> 
    <%= f.text_area :content, :rows => 3 %><br /> 
</p> 

сообщения /_form.html.erb:

<%= form_for(@post) do |f| %> 
    <% 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"> 
    <%= f.label :content %><br> 
    <%= f.text_field :content %> 
    </div> 
    <div class="field"> 
    <%= f.label :user %><br> 
    <%= f.text_field :user %> 
    </div> 
    <div class="replies"> 
    <% f.fields_for :replies do |builder| %> 
     <%= render 'reply_fields', :f => builder %> 
    <% end %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

schema.rb:

create_table "posts", force: true do |t| 
    t.string "content" 
    t.string "user" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "replies", force: true do |t| 
    t.string "content" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "post_id" 
    end 

выход в ответах части просто:

<div class="replies"> 
    </div> 

В ответу поля не отображаются вообще. В чем может быть проблема?

+4

Я думаю, что вы, возможно, пропустили знак равенства: '<% = f.fields_for ... ' –

ответ

1
<div class="replies"> 
    <%= f.fields_for :replies do |builder| %> 
     <%= render 'reply_fields', :f => builder %> 
    <% end %> 
    </div> 
1

Далее на комментарий & ответ, вы также должны build на replies объекты ActiveRecord:

#app/controllers/posts_controller.rb 
def new 
    @post = Post.new 
    @post.replies.build 
end 
+0

Спасибо, но странно, новый ответ добавляется каждый раз, когда я редактирую сообщение. Даже если действие редактирования в контроллере ответа пуст. – alexchenco

+0

Вы используете унаследованные ресурсы или что-то подобное? –

+0

@ Рик Пек в routes.rb? Нет, они просто перечислены один за другим. – alexchenco

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