Несколько моделей в одной форме в Rails 3.1? - PullRequest
5 голосов
/ 03 сентября 2011

Я использую Rails 3.1 и работаю на дискуссионном форуме. У меня есть модель под названием Topic, каждая из которых имеет множество Post с. Когда пользователь создает новую тему, он также должен создать первую Post. Тем не менее, я не уверен, как я могу сделать это в той же форме. Вот мой код:

<%= form_for @topic do |f| %>
<p>
    <%= f.label :title, "Title" %><br />
    <%= f.text_field :title %>
</p>

<%= f.fields_for :post do |ff| %>
    <p>
        <%= ff.label :body, "Body" %><br />
        <%= ff.text_area :body %>
    </p>
<% end %>

<p>
    <%= f.submit "Create Topic" %>
</p>
<% end %>

class Topic < ActiveRecord::Base
  has_many :posts, :dependent => :destroy
  accepts_nested_attributes_for :posts
  validates_presence_of :title
end


class Post < ActiveRecord::Base
  belongs_to :topic
  validates_presence_of :body
end

... но это, похоже, не работает. Есть идеи?

Спасибо!

Ответы [ 2 ]

6 голосов
/ 06 сентября 2011

@ В ответе Пабло, кажется, есть все, что тебе нужно.Но если быть более точным ...

Сначала измените эту строку в вашем представлении с

<%= f.fields_for :post do |ff| %>

на эту

<%= f.fields_for :posts do |ff| %>  # :posts instead of :post

Затем в вашем Topic добавьте контроллерэто

def new
  @topic = Topic.new
  @topic.posts.build
end

Это должно помочь вам.

3 голосов
/ 03 сентября 2011

Очень хорошее объяснение от Райана Бейтса здесь и здесь

Для вашего конкретного случая: вы используете модель (: post) вместо ассоциации (: posts), когда вы вызываете fields_for.

Также проверьте правильность использования <%= ... %>. В рельсах 3.x изменилось поведение конструкции. Помощникам блоков (form_for, fields_for и т. Д.) Это не нужно, а встроенным помощникам (text_field, text_area и т. Д.) Это нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...