Ruby on Rails пересмотреть вместо редактирования - PullRequest
2 голосов
/ 22 февраля 2011

Я все еще немного новичок в RoR и использую скаффолдинг для создания интерфейсов CRUD для данных.

Я использую devise для аутентификации пользователя и хочу разрешить редактировать пользователя, которому принадлежит конкретная записьили удалить, но защитить эти данные от других пользователей.Тем не менее, я хотел бы позволить другому пользователю редактировать или создавать новые версии.

Таким образом, если пользователь, пытающийся редактировать, должен выглядеть так, как будто он редактирует, но при отправке контроллер должен фактически сгенерировать новую запись (и потенциально указать parent_id записи, из которой он получен).

Любая помощь в реализации приветствуется.

Ответы [ 2 ]

2 голосов
/ 22 февраля 2011

Также загляните в Ancestry , это действительно хорошая библиотека для помощи с версиями.

0 голосов
/ 23 февраля 2011

Вот мое решение, которое я придумала. Я новичок в рубине, поэтому я предполагаю, что могу просто вызвать функцию create с теми же параметрами, но не знал, как это сделать, поэтому я просто продублировал код:

  def update
    @section = Section.find(params[:id])

    if @section.owner == current_user.id
      respond_to do |format|
        if @section.update_attributes(params[:section])
          format.html { redirect_to(@section, :notice => 'Section was successfully updated.') }
          format.xml  { head :ok }
        else
          format.html { render :action => "edit" }
          format.xml  { render :xml => @section.errors, :status => :unprocessable_entity }
        end
       end
     else
        # REVISE 
        @childsection = Section.new(params[:section])

        respond_to do |format|
            if @childsection.save
                format.html { redirect_to(@childsection, :notice => 'Section was successfully revised.') }
                format.xml  { render :xml => @childsection, :status => :created, :location => @childsection }
            else
                format.html { render :action => "new" }
                format.xml  { render :xml => @childsection.errors, :status => :unprocessable_entity }
            end
        end
     end
  end
...