对标题感到抱歉,这真的很难解释,但我会尽力让它尽可能清楚。
所以,我有一个应用程序,我正在建立一种"社会转移交易网络"。因此,在这个应用程序中,我使用了一个日历(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_for
或shift_path
时,模型将使用:shift_id
来生成该URL,但在内部它将使用自动递增id