Устаревшая база данных ruby ​​on rails - основной идентификатор, полученный из другой таблицы - PullRequest
0 голосов
/ 16 мая 2011

В моем приложении rails есть форма для отправки.

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

Итак, в моей форме я хочу передать значение последовательности как первичное, но оно не работает

new.html.erb:

<% form_for @submission, :html => { :multipart => true } do |f| %>

<%= f.hidden_field :SUB_OID, :value => $temporary_id %>

<% end %>

submission.rb:

class SubmissionsController < ApplicationController
#retrieve id for new submission
result = ActiveRecord::Base.connection.execute('SELECT SEQ_TEMP_ID FROM ref_sequences')
inc_result = (result.fetch_row.first)


#increment temporary id by 1
$temporary_id = (inc_result.to_i) + 1

def create
@submission = Submission.new(params[:submission])
###@submission.SUB_OID= $temporary_id ###

  if @submission.save

  #after temp submission is saved, update id in ref_sequences table#
  ActiveRecord::Base.connection.execute("UPDATE ref_sequences SET SEQ_TEMP_ID = SEQ_TEMP_ID + 1")

  flash[:notice] = 'Submission was successfully created'
      redirect_to show_submission_path(@submission.SUB_OID)

  else
  render :action => 'new'
  end

end

end

Я заметил, что следующая строка не работает:

<%= f.hidden_field :SUB_OID, :value => $temporary_id %>

Однако, чтобы передать значение последовательности в качестве идентификатора отправки, я должен поместить следующую строку в функцию def create:

@submission.SUB_OID= $temporary_id

Теперь я хочу знать, могу ли я передать первичный идентификатор представления на самой странице new.html.erb вместо объявления его в функции def create.

Большое спасибо за внимание к этому ..

ура

1 Ответ

1 голос
/ 16 мая 2011

Лучше не указывать идентификатор в ваших формах и установить его при сохранении:

class Submission < ActiveRecord::Base

  before_create :fetch_id
  after_create  :update_sequence_table

private

  def fetch_id
    self[:id] = connection.execute('SELECT SEQ_TEMP_ID FROM ref_sequences')
  end

  def update_sequence_table
    connection.execute("UPDATE ref_sequences SET SEQ_TEMP_ID = SEQ_TEMP_ID + 1")
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...