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

时间:2015-02-20 23:24:30

标签: ruby-on-rails ruby-on-rails-4 primary-key

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

所以,我有这个应用程序,我正在构建一种社交转移交易网络#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

1 个答案:

答案 0 :(得分:0)

如果我理解的是正确的,那么你想要的就是URL变成这样的

/shifts/:some_random_hash/edit

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

class Shift < ActiveRecord::Base
  to_param
    shift_id
  end
end

这种方式当您使用url_forshift_path时,模型将使用:shift_id代替生成该网址,但在内部会使用自动增量ID