действие дупла или клона в рельсах - PullRequest
0 голосов
/ 25 февраля 2019

Ну, я собираюсь уточнить, что я делаю это

class DuplicatesController < ApplicationController
  before_action :set_venue, only: [:new]

  def new
  end

  def create
    if @venue.duplicate(venue_params)
      flash[:success] = t('controller.create.success',
                          resource: Venue.model_name.human)
      redirect_to admin_venue_url @venue
    else
      flash[:warning] = @venue.errors.full_messages.to_sentence
      render :new
    end
  end

  private
  def set_venue
    @venue = Venue.friendly.find params[:venue_id]
  end
end

def venue_params
  params.require(:venue).permit(:name,
                                :address,
                                :address_complement,
                                :city,
                                :phone)
end

end

def duplicate

(имя, адрес, адрес_полнение, город, телефон)

new_venue = self.dup
new_venue.update_attributes(description: self.description,
                            logo: self.logo,
                            opening_time: self.opening_time,
                            closing_time: self.closing_time,
                            ally_id: self.ally_id)
new_venue.save

end

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

1 Ответ

0 голосов
/ 25 февраля 2019

Вероятно, лучший способ сделать это - передать только id / slug оригинальной модели.

Тогда ваш duplicates_controller.rb может выглядеть примерно так:

class DuplicatesController < ApplicationController
  def create
    old_venue = Venue.friendly.find(params[:id])
    venue = old_venue.dup
    venue.attributes = venue_params
    if venue.save
      # success render
    else
      # error render
    end
  end

  private 

  def venue_params
    params.require(:venue).permit(:permitted_attributes) # id should not be there
  end
end

Конечно, вы можете изменить его, но я не думаю, что он необходим в этой ситуации.

Или мой любимый вариант - заменить VenueController # create на что-то подобное, чтобы разрешить создание из другого экземпляра:

if copy_from_id = params[:copy_from_id]
  @copy_source = Venue.find_by(id: copy_from_id)
  @venue = @copy_source.dup
  @venue.attributes = venue_params
else
  @venue = Venue.new
end

if @resource.save
  ...
else
  ...
end
...