Обновление пользовательского поля с помощью current_user при сохранении вложенных объектов - PullRequest
1 голос
/ 13 августа 2010

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

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

...