如何修改rails用来从数据库中提取对象的参数



对标题感到抱歉,这真的很难解释,但我会尽力让它尽可能清楚。

所以,我有一个应用程序,我正在建立一种"社会转移交易网络"。因此,在这个应用程序中,我使用了一个日历(fullcalendarlrails),并使用模型生成班次,但我意识到,当由于索引没有重置而导致大量对象删除或更改时,数据库自动生成的id往往没有用。因此,我想在我的shift模型中放一个shift_id列,并使用SecureRandom.ulsafe_base64(8).生成id

但是,我如何将它设置为主键,以便在编辑或调用show时使用shift_id作为params?

我尝试了set:id=>false和set:primary=>:shift_id,但仍然没有结果。我相信,因为我的路由格式是"/shifts/:id/edit(.:format)",格式化为pull:id,所以它不起作用。

感谢您提前提供的帮助。

class CreateShifts < ActiveRecord::Migration
def change
create_table :shifts, {:id => false, :primary_key => :shift_id}   do |t|
  t.string :position
  t.datetime :date
  t.datetime :start_time
  t.datetime :finish_time
  t.integer :original_owner
  t.integer :current_owner
  t.string   :shift_id 
  t.string :shift_posted, :default => "Not Posted"
  t.timestamps
end

结束

如果我所理解的是正确的,那么你所希望的就是URL变成这样的

/shifts/:some_random_hash/edit

要做到这一点,您不需要像那样扰乱数据库,只需生成那个普通表,并添加:shift_id字段,然后告诉模型哪个字段用于url。

class Shift < ActiveRecord::Base
  to_param
    shift_id
  end
end

这样,当您使用url_forshift_path时,模型将使用:shift_id来生成该URL,但在内部它将使用自动递增id

最新更新