Странная ошибка сохранения при попытке клонировать существующие атрибуты в новую запись в моей БД - PullRequest
0 голосов
/ 12 марта 2012

контроллер (tce_params_controller)

def clone
  tce_params = TceParamSet.find(params[:id])
  puts "This is tce_params"
  puts tce_params
  cloned_tce_params = tce_params.clone
  puts "This is cloned_tce_params"
  puts cloned_tce_params
  if @saved == true
    flash[:notice] = 'Item was successfully cloned.'
    redirect_to edit_tce_param_set_path(@cloned_tce_params)
  else
    flash[:notice] = 'ERROR: Item can\'t be clone'
    puts cloned_tce_params.errors
    redirect_to system_data_path
  end
end

Модель (TceParamSet)

def clone
  cloned_tce_params = TceParamSet.new(self.attributes)
puts "this is attributes in model"
puts cloned_tce_params.attributes
cloned_tce_params.id = nil
if cloned_tce_params.save
  cloned_tce_params = cloned_tce_params.name + "(cloned)"
  @saved = true
else
  @saved = false
end
return cloned_tce_params
end

вид

=link_to "Clone", clone_test_group_path(test_group), :method => :clone, :class => :tce_param_sets

Маршрут

map.connect '/tce_param_sets/:id/clone', :controller => "tce_param_sets", :action => "clone"

Когда я запускаю это, я получаю сообщение об ошибке "1013 *

NoMethodError в наборе параметров TceController # clone

неопределенный метод `save 'для # (таблица не существует)

/usr/local/rvm/gems/ruby-1.8.7-p357@rails238/gems/rails-2.3.8/lib/commands/server.rb: 111 /usr/local/rvm/rubies/ruby-1.8.7-p357/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in gem_original_require' /usr/local/rvm/rubies/ruby-1.8.7-p357/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in require ' скрипт / сервер: 3

Запрос

Параметры:

* * +1025 { "ID" => "3"} * 1 026 *

Показать дамп сеанса


Ответ

Заголовки:

{ "Content-Type" => "", "Cache-Control" => "нет кэша"}

используя этот код я получаю

Обработка клона TceParamSetsController # (для 127.0.0.1 в 2012-03-12 09:36:37) [GET] Параметры: {"id" => "2"} Загрузка TceParamSet (1,5 мс) SELECT * FROM "tce_param_sets" WHERE ("tce_param_sets". "Id" = 2) ВНИМАНИЕ: Не удается назначить массово эти защищенные атрибуты: id SQL (0,3 мс) НАЧИНАЕТСЯ Загрузка TceParamSet (0,8 мс) SELECT "tce_param_sets" .id FROM "tce_param_sets" WHERE ("tce_param_sets". "Name" = 'Perf: 14520 - Fairshare TM 4.00 (последняя) - PTS 6.00 (последняя ветвь TM-4.00) - NA Wireline ') ПРЕДЕЛ 1 SQL (0,4 мс) ROLLBACK

Почему это происходит? Я не даю id никакого значения, но он говорит, что я пытаюсь присвоить id ...

1 Ответ

0 голосов
/ 12 марта 2012

Может показаться, что возвращаемое значение из вашего метода клонирования не является объектом ActiveRecord, поэтому метод сохранения не существует для возвращаемого вами значения. Кроме того, метод клона в вашей модели имеет циклическую ссылку, так как он вызывает ваш метод «клон» в своем теле. Так что я не уверен, как именно это может работать вообще.

Во-первых, убедитесь, что возвращаемое значение действительно является объектом ActiveRecord, и подумайте об использовании «super» для вызова метода клона объекта ruby.

...