对标题感到抱歉,这很难解释,但我会尽力让它尽可能清晰。
所以,我有这个应用程序,我正在构建一种社交转移交易网络#39;所以在这个应用程序中我有一个日历(fullcalendar-rails)我使用,我使用模型生成轮班但我意识到数据库自动生成的ID往往在有很多对象删除时没用更改,因为索引未被重置。所以,我认为我会在Shift模型中放置一个shift_id列,并使用SecureRandom.urlsafe_base64(8)生成id。
但是如何将其设置为主键,以便在我编辑或调用show时使用shift_id作为参数?
我尝试过设置:id => false,并设置:primary => :shift_id但仍然没有结果。我相信因为我的路线格式是" / shifting /: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
端
答案 0 :(得分:0)
如果我理解的是正确的,那么你想要的就是URL变成这样的
/shifts/:some_random_hash/edit
要做到这一点,你不需要像这样弄乱你的数据库,只需生成那个普通的表,并添加:shift_id
字段,然后告诉模型哪个字段用于网址。
class Shift < ActiveRecord::Base
to_param
shift_id
end
end
这种方式当您使用url_for
或shift_path
时,模型将使用:shift_id
代替生成该网址,但在内部会使用自动增量ID