簡體   English   中英

試圖在軌道上的 ruby 中重命名 Devise Model 名稱

[英]Trying to rename Devise Model name in ruby on rails

我們在 Rails 應用程序上有 2 個 ruby,其中一個正在使用另一個 json 輸出。 但是我們決定將它們集成起來,這會遇到很多問題。

現在的問題是,一個系統的作者曾經為所有用戶身份驗證和注冊“設計”gem,這很好。 但是當我們不得不集成它們時,它就出現了問題,因為其他系統也有一個名為 users 的 model,它沒有用於此目的。

將 devise 用戶 model 重命名為我目前正在嘗試的“站點用戶”之類的名稱會容易得多。 比重命名另一個 model。

我嘗試將所有文件中與 devise 相關的所有內容重命名為 siteuser 而不是 user 但仍然出現錯誤。 任何人對此有任何建議。 如果我可以讓這個 devise 用戶使用與“用戶”不同的 model 名稱,我將能夠取得很大進展,但這證明很煩人。

當前錯誤是

Devise::Sessions#new 中的 NoMethodError - 使用“if user_signed_in”突出顯示該行

    <li>
    <%= link_to t('nav.support'), 'http://banana.sweatervest.net/' %>
    </li>
    <%- if user_signed_in? -%>
    <%- if controller_name != 'dashboard' -%>
    <li>
    <%= link_to t('nav.dashboard'), :dashboard %>

為什么不卸載它然后重新安裝模型。

第一:

 rails destroy devise User

然后:

rails generate devise whateveryourmodelnamehere

比試圖重命名一切容易得多,只因為我去過那里;)

實際上,我走了很長的路(?1 小時的工作)來重命名我的 Devise model 我十年前命名為 Admin。 我希望它是用戶。 (以前的rails版本4,到我最新的rails版本7,devise 4.7)

請注意,您可能比我對命名的了解更多,因此此解決方案的購買者要小心。 例如,我的任何表都沒有索引(為了上帝的緣故,我現在將這樣做)。 Devise 本身並沒有真正將 model 名稱寫入東西,所以它主要是在挖掘你自己的過去:我的一步一步對我有用:

我 - 開始一個新的干凈的 git 分支。 除非你能夠監督你接下來要做什么,否則你會受苦。

II - 重命名所有管理員 -> 用戶。 (約 34 個文件受影響)在我的編輯器中使用搜索/替換(區分大小寫):

  1. 管理員 -> 用戶的小寫(也尋找管理員 -> 錯過的用戶)
  2. 大寫管理員 -> 用戶

手動重命名一些文件,如 model:admin.rb -> user.rb

III - 創建一些遷移以創建新的用戶表並在受影響的表中將 admin_id 更改為 user_id:

  • 從 schema.rb 獲取 create_table 主體並將其包裝到遷移中,使用 devise model 的新名稱,我的最終結果如下:
    class AddUsersTable < ActiveRecord::Migration[5.2]
      def change
        create_table :users do |t|
          t.string "email", limit: 255, default: "", null: false
          t.string "encrypted_password", limit: 255, default: "", null: false
          t.string "reset_password_token", limit: 255
          t.datetime "reset_password_sent_at"
          t.datetime "remember_created_at"
          t.integer "sign_in_count", default: 0, null: false
          t.datetime "current_sign_in_at"
          t.datetime "last_sign_in_at"
          t.string "current_sign_in_ip", limit: 255
          t.string "last_sign_in_ip", limit: 255
          t.datetime "created_at"
          t.datetime "updated_at"
          t.index ["email"], name: "index_users_on_email", unique: true
          t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true  
        end
      end
    end

然后進行遷移以更改其他表需要更新的外鍵

class RenameAdminIdsToUser < ActiveRecord::Migration[5.2]
  def change
    rename_column(:batches, :admin_id, :user_id)
    rename_column(:offices, :admin_id, :user_id)
  end
end

IV - 將舊表中的數據復制到新表中。 在我的情況下,我使用的是 postgres,但 SQL 可能適用於大多數基於 SQL 的數據庫。 在這里,我登錄到我的 postgres-db 並運行以下 sql:

INSERT INTO users (SELECT * FROM admins);

(這個查詢也可以放在一個更干凈的遷移中。)

V - 如果您像我一樣設置新的導軌 - 從導軌 5 到 7,還請確保從 devise.rb 復制設置,例如胡椒令牌鍵以匹配您在舊表中的數據。

在這些步驟之后,我的 Rails 應用程序繼續使用用戶而不是管理員,就好像什么都沒發生一樣!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM