Ruby on rails RubyonRails遗留数据库-从另一个表检索的主id

Ruby on rails RubyonRails遗留数据库-从另一个表检索的主id,ruby-on-rails,Ruby On Rails,在我的rails应用程序中,我有一个提交表单 我使用的是一个遗留数据库,其中提交id值是从序列表中检索的。该序列值用作提交的主键 所以在我的表单中,我想将序列值作为primary传递,但它不起作用 new.html.erb: <% form_for @submission, :html => { :multipart => true } do |f| %> <%= f.hidden_field :SUB_OID, :value => $temporary_i

在我的rails应用程序中,我有一个提交表单

我使用的是一个遗留数据库,其中提交id值是从序列表中检索的。该序列值用作提交的主键

所以在我的表单中,我想将序列值作为primary传递,但它不起作用

new.html.erb:

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

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

<% end %>
现在的问题是,我想知道我是否可以在new.html.erb页面本身传递提交的主id,并在def create函数中声明它

非常感谢您调查此事


干杯

最好将ID从表单中删除,并将其设置为“保存”:

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
类提交
如果您必须在应用程序中执行增量操作,那么该操作是如何工作的?当3个人同时加载该页面时会发生什么?他们是否都获得相同的SUB_OID?不,他们不应该获得相同的id。每次加载新提交表单时,都应该为提交生成一个新id,但是的,我理解,如果几个人同时加载同一页面,这可能会导致问题。不过,对于dunedain289上面所说的,这仍然会带来竞争条件问题,但是窗口非常小。这可能不是单个用户或小型内部应用程序的问题,但我理解您可能无法为他们移动其他人的山脉。
<%= f.hidden_field :SUB_OID, :value => $temporary_id %>
@submission.SUB_OID= $temporary_id
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