Я сохраняю вложенные объекты внутри объектов, к которым они принадлежат, но когда я это делаю, они не используют контроллер, который я сохраняю, а родительский контроллер.
class Project < ActiveRecord::Base
belongs_to :company
belongs_to :user
has_many :tasks
accepts_nested_attributes_for :tasks, :allow_destroy => true
end
в представлениях у меня что-то вродеэто
<% form_for @project do |c| %>
<% c.fields_for :tasks, @project.tasks.last do |p| %>
<%= p.text_field :name %>
<% end %>
<%= submit_tag '+' %>
<% end %>
, поэтому я пытаюсь обновить поле пользователя полями для этого последнего поля, указанного в контроллере.
def show
@project = Project.find(params[:id])
@project.tasks.build
@project.tasks.last.user = current_user # this should pass to the show.html.erb, to be saved back
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @project }
end
end
ЯПодумав, может быть, решением было бы проверить, задано ли имя пользователя во вложенных объектах, и если не заполнять его текущим пользователем в:
def update
@project = Project.find(params[:id])
@project.user = current_user
#find anything @project.....user blank and set to current user
respond_to do |format|
if @project.update_attributes(params[:project])
format.html { redirect_to(@project, :notice => 'Project was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @project.errors, :status => :unprocessable_entity }
end
end
end
Я надеюсь, что это решение, и каксделать это?
пример его работы в настоящее время на http://severe -fire-37.heroku.com