Вот код работающего скелета: я создал новый проект, попробовал комбинацию других ответов и, наконец, заставил его работать.
Вот мое решение, после которого нужно следитьза.Я использую разные модели, поэтому терпите меня:
- Мои модели: обсуждение has_many сообщений .
- Дискуссия не имеет атрибутов.
- Сообщений имеет содержимое: текст и обсуждение_ид: целое число.
Рабочий код
(модель) обсуждение.rb
has_many :posts
accepts_nested_attributes_for :posts
(модель) post.rb
belongs_to :discussion
rout.rb
resources :discussions do
resources :posts
end
(обсуждениеview) _form.html.erb
<%= form_for(@discussion) do |f| %>
<%= f.fields_for :posts, @post do |p| %>
<%= p.text_area :content %>
<% end %>
<%= f.submit %>
<% end %>
(контроллер) Discussions_controller.rb
def new
@discussion = Discussion.new
@post = @discussion.posts.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @discussion }
end
end
def create
@discussion = Discussion.new(params[:discussion])
respond_to do |format|
if @discussion.save
format.html { redirect_to(@discussion, :notice => 'Discussion was successfully created.') }
format.xml { render :xml => @discussion, :status => :created, :location => @discussion }
else
format.html { render :action => "new" }
format.xml { render :xml => @discussion.errors, :status => :unprocessable_entity }
end
end
end
Возможные вещи, которые могут пойти не так
Во-первых, Тило былправильно, я получаю неизвестный атрибут: post , если я делаю
# WRONG!
f.fields_for :post
Во-вторых, я должен иметь переменную экземпляра @post в действии new , иначе сообщение.контекстная текстовая область не будет отображаться.
# REQUIRED!
@post = @discussion.posts.build
В-третьих, если я использую f.fields_for @ post , действие создания будет пожаловаться на неизвестный атрибут: post тоже.
# WRONG!
f.fields_for @post do |p|
Используйте это вместо:
# RIGHT!
f.fields_for :posts, @post do |p|
Конец
Так что да, я бы хотел, чтобы мы увидели больше документации по этому вопросу (может 'не вижу каких-либо полезных).Например, я вижу некоторое использование form_for [@discussion, @post], но никогда не смогу заставить его работать.