ฉันจะลบเส้นทาง Devise เพื่อสมัครได้อย่างไร


147

ฉันกำลังใช้ Devise ในแอป Rails 3 แต่ในกรณีนี้ผู้ใช้จะต้องสร้างขึ้นโดยผู้ใช้ปัจจุบันซึ่งเป็นผู้กำหนดสิทธิ์ที่ตนจะมี

ด้วยเหตุนี้ฉันต้องการ:

  • การลบเส้นทางสำหรับผู้ใช้ในการลงทะเบียน
  • ที่จะยังคงให้ผู้ใช้สามารถแก้ไขโปรไฟล์ของพวกเขา (เปลี่ยนที่อยู่อีเมลและรหัสผ่าน) หลังจากที่พวกเขาได้ลงทะเบียน

ฉันจะทำสิ่งนี้ได้อย่างไร

ขณะนี้ฉันกำลังลบเส้นทางนี้อย่างมีประสิทธิภาพโดยวางสิ่งต่อไปนี้ก่อนหน้าdevise_for :users:

match 'users/sign_up' => redirect('/404.html')

ใช้งานได้ แต่ฉันคิดว่ามีวิธีที่ดีกว่าใช่มั้ย

ปรับปรุง

ดังที่เบอนัวต์การ์เรตกล่าวว่าทางออกที่ดีที่สุดในกรณีของฉันคือการข้ามการสร้างเส้นทางการลงทะเบียนและเพียงแค่สร้างสิ่งที่ฉันต้องการจริงๆ

ในการทำเช่นนั้นฉันวิ่งครั้งแรกrake routesจากนั้นใช้ผลลัพธ์เพื่อสร้างสิ่งที่ฉันต้องการอีกครั้ง ผลลัพธ์ที่ได้คือ:

devise_for :users, :skip => [:registrations] 
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
end

โปรดทราบว่า:

  • ฉันยังมี:registerableในUserแบบจำลองของฉัน
  • devise/registrations จัดการการอัปเดตอีเมลและรหัสผ่าน
  • การอัปเดตแอททริบิวผู้ใช้อื่น ๆ - การอนุญาต ฯลฯ ถูกจัดการโดยคอนโทรลเลอร์อื่น

คำตอบจริง:

ลบเส้นทางสำหรับเส้นทาง Devise ที่เป็นค่าเริ่มต้น เช่น:

devise_for :users, path_names: {
  sign_up: ''
}

4
ฉันคิดว่าโซลูชันดั้งเดิมของคุณนั้นเรียบง่ายกว่าและชัดเจนกว่ามาก มีปัญหาจริงกับความปลอดภัยหรือไม่?
counterbeing

ด้วยเหตุผลบางอย่างโซลูชันที่อัปเดตของคุณเก็บข้อผิดพลาดไว้ว่าฉันต้องการ ID หลังจากหนึ่งชั่วโมงของการดึงผมและรีสตาร์ทเซิร์ฟเวอร์จำนวนมากมันก็แก้ไขตัวเองได้ ฉันไม่มีความคิด ... แต่ถ้ามีคนอื่นลองลองดู!
Erik Trautman

@counterbeing - ไม่มีปัญหาที่ฉันรู้ฉันไม่ชอบเส้นทางที่ไม่ได้ใช้หรือพึ่งสั่ง
Nathan Long

1
"คำตอบจริง" ไม่สมบูรณ์ฆ่าเส้นทางถ้ามันถูกเปลี่ยนเส้นทางไปจากภายในตัวควบคุมประดิษฐ์ การทำงานเริ่มต้นจะยังคงเส้นทางที่คุณลงทะเบียนเส้นทางถ้าคุณตีเส้นทาง GET https://example.com/users/เช่น ดูคำตอบของฉันด้านล่าง
lacostenycoder

1
ข้อบกพร่องด้านความปลอดภัย! "คำตอบจริง" ที่แสดงให้เห็นเพียงกำจัดแบบฟอร์มลงทะเบียนเท่านั้นไม่ได้กำจัดเส้นทาง POST ที่สร้างผู้ใช้จริง
Eric Terry

คำตอบ:


54

ฉันพยายามทำสิ่งนี้เช่นกัน แต่มีกระทู้ในกลุ่ม google ประดิษฐ์ทำให้ฉันไม่สามารถค้นหาวิธีแก้ปัญหาที่สะอาดจริงๆได้

ฉันจะอ้างJosé Valim (ผู้ดูแล Devise):

ไม่มีตัวเลือกตรงไปข้างหน้า คุณสามารถจัดหาแพตช์หรือใช้: skip =>: ลงทะเบียนและเพิ่มเส้นทางที่คุณต้องการเท่านั้น

คำถามเดิมคือ:

มีวิธีที่ดีในการลบเส้นทางเฉพาะ (เส้นทางลบ) ออกจาก Rails หรือไม่?


4
ค่อนข้างถูกต้อง ในความเป็นจริงฉันเสนอแพทช์และเขาปฏิเสธอย่างสุภาพว่า: "วันนี้คุณสามารถข้ามคอนโทรลเลอร์ทั้งหมดได้มันไม่เหมาะกับการใช้งาน แต่การตั้งค่าเส้นทางสำหรับคอนโทรลเลอร์ทั้งหมดด้วยตนเองนั้นค่อนข้างตรงไปตรงมาฉันเชื่อว่าการยกเว้นเส้นทาง โดยใช้ชื่อจะทำให้รหัสการสร้างเส้นทางมีความซับซ้อนมากขึ้น (มากกว่าที่เป็นอยู่แล้ว) เพราะเราจะไม่สามารถใช้ผู้ช่วยของ Rails (เช่นทรัพยากรทรัพยากรและเพื่อน) " github.com/plataformatec/devise/issues/…
นาธานลอง

2
ฉันไม่รู้ว่านี่เป็นกรณีเมื่อคำตอบนี้ถูกเขียนขึ้นมา แต่รหัสในใบเสนอราคาจากJoséนั้นผิด ในประดิษฐ์ 3.4.1 ก็ไม่ได้:skip => :registrations :skip => :registerable
GMA

89

คุณสามารถทำได้ในรูปแบบของคุณ

# typical devise setup in User.rb
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable

เปลี่ยนเป็น:

devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable

สังเกตว่าสัญลักษณ์:registerableถูกลบ

เพียงเท่านี้ไม่จำเป็นต้องมีอะไรอีก เส้นทางและลิงก์ไปยังหน้าลงทะเบียนทั้งหมดจะถูกลบอย่างน่าอัศจรรย์เช่นกัน


21
น่าเสียดายที่นี่ยังลบเส้นทางไปยังedit_user_registrationที่ฉันต้องการ ดังที่ฉันกล่าวว่า "พวกเขาควรจะสามารถแก้ไขโปรไฟล์ได้"
Nathan Long

1
อ๊ะโอเคปกติฉันจะปัดเศษสิ่งนี้โดยการติดตั้งrails_admin gem ซึ่งจะช่วยให้ผู้ใช้ไปlocalhost:3000/adminที่ที่พวกเขาสามารถแก้ไขบัญชีของพวกเขาได้แม้ว่าจะมีการลบวัตถุที่สามารถลงทะเบียนได้ หากนั่นไม่ใช่วิธีแก้ปัญหาที่ใช้งานได้ให้ดูที่CanCanซึ่งช่วยให้คุณกำหนดว่าใครสามารถและไม่สามารถเข้าถึงทรัพยากรได้ ฉันมักจะเพิ่มบทบาทเช่น 'admin' หรือ 'moderator' และล็อคทุกคนจากหน้า sign_up
stephenmurdoch

28
การใช้ส่วนผู้ดูแลระบบ (ซึ่งสร้างขึ้นเพื่ออนุญาตให้แก้ไขเร็กคอร์ดที่กำหนดเอง) เพื่อให้วิธีการสำหรับผู้ใช้ในการแก้ไขโปรไฟล์ของตนเองเป็นความคิดที่แย่ที่สุดที่ฉันเคยได้ยินมานาน กรุณาไม่มีใครทำเช่นนี้
Jeremy

วิธีการปิดการใช้งานsign_inในการผลิต?
WM

30

ฉันมีปัญหาที่คล้ายกันพยายามลบเส้นทางdevise_invitableสำหรับการสร้างและใหม่ :

ก่อน:

 devise_for :users

เสาะหาเส้นทาง

accept_user_invitation GET    /users/invitation/accept(.:format)           devise/invitations#edit
       user_invitation POST   /users/invitation(.:format)                  devise/invitations#create
   new_user_invitation GET    /users/invitation/new(.:format)              devise/invitations#new
                       PUT    /users/invitation(.:format)                  devise/invitations#update

หลังจาก

devise_for :users , :skip => 'invitation'
devise_scope :user do
  get "/users/invitation/accept", :to => "devise/invitations#edit",   :as => 'accept_user_invitation'
  put "/users/invitation",        :to => "devise/invitations#update", :as => nil
end

เสาะหาเส้นทาง

accept_user_invitation GET    /users/invitation/accept(.:format)                 devise/invitations#edit
                       PUT    /users/invitation(.:format)                        devise/invitations#update

หมายเหตุ 1 กำหนดขอบเขตhttps://github.com/plataformatec/devise#configuring-routes

หมายเหตุ 2ฉันใช้มันกับ devise_invitable แต่จะใช้งานได้กับคุณลักษณะที่สามารถประดิษฐ์ได้ *

หมายเหตุสำคัญ:ดูว่า devise_scope อยู่ในผู้ใช้ที่ไม่ใช่ผู้ใช้หรือไม่ ถูกต้องระวังสิ่งนี้! มันสามารถทำให้เกิดความเจ็บปวดมากมายที่ทำให้คุณมีปัญหานี้:

Started GET "/users/invitation/accept?invitation_token=xxxxxxx" for 127.0.0.1 
Processing by Devise::InvitationsController#edit as HTML
  Parameters: {"invitation_token"=>"6Fy5CgFHtjWfjsCyr3hG"}
 [Devise] Could not find devise mapping for path "/users/invitation/accept?  invitation_token=6Fy5CgFHtjWfjsCyr3hG".
This may happen for two reasons:

1) You forgot to wrap your route inside the scope block. For example:

  devise_scope :user do
     match "/some/route" => "some_devise_controller"
  end

 2) You are testing a Devise controller bypassing the router.
   If so, you can explicitly tell Devise which mapping to use:

    @request.env["devise.mapping"] = Devise.mappings[:user]

ขอบคุณสิ่งที่ฉันกำลังมองหา สำหรับคนอื่น ๆ ที่ใช้โซลูชันนี้ฉันต้องผนวก /: id เข้ากับนิยามเส้นทางที่ใส่
John

21

ฉันพบโพสต์อื่นที่คล้ายกับโพสต์นี้และต้องการแบ่งปันคำตอบ @chrisnicola ที่ให้ไว้ ในโพสต์พวกเขาพยายามบล็อกเฉพาะการสมัครของผู้ใช้ในระหว่างการผลิต

คุณสามารถแก้ไขตัวควบคุมการลงทะเบียน คุณสามารถใช้สิ่งนี้:

ใน"แอพ / คอนโทรลเลอร์ / registrations_controller.rb"

class RegistrationsController < Devise::RegistrationsController
  def new
    flash[:info] = 'Registrations are not open.'
    redirect_to root_path
  end

  def create
    flash[:info] = 'Registrations are not open.'
    redirect_to root_path
  end
end

สิ่งนี้จะแทนที่ตัวควบคุมของอุปกรณ์และใช้วิธีการข้างต้นแทน พวกเขาเพิ่มข้อความแฟลชในกรณีที่มีคนทำมันในหน้า sign_up คุณควรจะสามารถเปลี่ยนเส้นทางไปยังเส้นทางใดก็ได้ที่คุณต้องการ

นอกจากนี้ใน"config / route.rb"คุณสามารถเพิ่มสิ่งนี้:

devise_for :users, :controllers => { :registrations => "registrations" }

การปล่อยให้เป็นเช่นนี้จะช่วยให้คุณใช้การออกแบบมาตรฐานแก้ไขโปรไฟล์ของคุณ หากคุณต้องการคุณยังสามารถแทนที่ตัวเลือกแก้ไขโปรไฟล์โดยรวมถึง

  def update
  end

ใน"app / controllers / registrations_controller.rb"


13

นี่เป็นคำถามเก่า - แต่เมื่อเร็ว ๆ นี้ฉันได้แก้ปัญหาเดียวกันและหาวิธีแก้ปัญหาที่สวยงามกว่า:

devise_for :users, :skip => [:registrations] 
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put 'users' => 'devise/registrations#update', :as => 'user_registration'
end

และมันให้ชื่อเริ่มต้นสำหรับเส้นทางที่มีชื่อ (เช่นcancel_user_registration) โดยไม่ต้อง verbose มากเกินไป

devise_for :users, skip: [:registrations]

# Recreates the Devise registrations routes
# They act on a singular user (the signed in user)
# Add the actions you want in 'only:'
resource :users,
    only: [:edit, :update, :destroy],
    controller: 'devise/registrations',
    as: :user_registration do
  get 'cancel'
end

rake routes เอาท์พุทที่มีโมดูลประดิษฐ์เริ่มต้น:

                  Prefix Verb   URI Pattern                    Controller#Action
        new_user_session GET    /users/sign_in(.:format)       devise/sessions#new
            user_session POST   /users/sign_in(.:format)       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)      devise/sessions#destroy
           user_password POST   /users/password(.:format)      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format) devise/passwords#edit
                         PATCH  /users/password(.:format)      devise/passwords#update
                         PUT    /users/password(.:format)      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)        devise/registrations#cancel
  edit_user_registration GET    /users/edit(.:format)          devise/registrations#edit
       user_registration PATCH  /users(.:format)               devise/registrations#update
                         PUT    /users(.:format)               devise/registrations#update
                         DELETE /users(.:format)               devise/registrations#destroy

12

คุณสามารถแทนที่ "devise_scope" โดยวางไว้ข้างหน้า "devise_for"

devise_scope :user do
  get "/users/sign_up",  :to => "sites#index"
end

devise_for :users

ไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุด แต่เป็นวิธีแก้ปัญหาของฉันในขณะนี้เพราะเพิ่งเปลี่ยนเส้นทางกลับไปที่หน้าลงชื่อเข้าใช้


1
ฉันใช้วิธีการที่คล้ายกัน แต่ต้องการให้ URL เปลี่ยนด้วยดังนั้นไปด้วย `รับ" / users / sign_up ",: เพื่อ => redirect (" / ")`
dinjas

การแก้ปัญหาที่ง่ายและง่ายที่สุด แต่การแก้ปัญหานี้มีปัญหาหนึ่งนาที ที่อยู่ยังคงอยู่ ถ้าคุณใส่/users/sign_upแล้วคุณจะเข้าถึงsites#indexไม่ได้แต่ที่อยู่ยังคงได้รับยังคงอยู่sign_up /users/sign_up
Penguin

5

ฉันชอบคำตอบของ @ max แต่เมื่อพยายามใช้มันฉันพบข้อผิดพลาดเนื่องจากdevise_mappingไม่มีข้อมูล

ฉันแก้ไขวิธีแก้ปัญหาของเขาเล็กน้อยเป็นที่ดูเหมือนจะแก้ไขปัญหา มันจำเป็นต้องมีการตัดสายไปยังภายในresourcedevise_scope

devise_for :users, skip: [:registrations]

devise_scope :user do
  resource :users,
           only: [:edit, :update, :destroy],
           controller: 'devise/registrations',
           as: :user_registration do
    get 'cancel'
  end
end

โปรดทราบว่าdevise_scopeคาดว่าเอกพจน์:userในขณะที่คาดว่าพหูพจน์resource:users


4

ทำสิ่งนี้ในเส้นทาง

devise_for :users, :controllers => {:registrations => "registrations"}, :skip => [:registrations]
  as :user do
    get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
    put 'users' => 'devise/registrations#update', :as => 'user_registration'
end

  devise_scope :user do
    get "/sign_in",  :to => "devise/sessions#new"
    get "/sign_up",  :to => "devise/registrations#new"
  end

คุณจะได้รับข้อผิดพลาดในขณะที่คุณมาลงชื่อเข้าใช้หน้าเพื่อแก้ไข ทำการเปลี่ยนแปลงใน: app / views / devise / shared / _links.erb

<% if  request.path != "/sign_in" %>
    <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
        <%= link_to "Sign up", new_registration_path(resource_name) %><br />
    <% end -%>
<% end %>

สิ่งนี้ใช้งานได้สำหรับฉัน (ฉันใช้devise_forและasบล็อกเท่านั้น) และฉันต้องลบออก:registerableในโมเดล
dusan

3

ฉันพบสิ่งนี้ทำงานได้ดีโดยไม่ยุ่งกับเส้นทางหรือเพิ่มวิธีการควบคุมแอปพลิเคชัน วิธีการของฉันคือการแทนที่วิธีการประดิษฐ์ เพิ่มส่วนนี้ให้app/controllers/devise/registrations_controller.rb ฉันไม่ได้ใช้วิธีการอื่นเพื่อความกระชับ

class Devise::RegistrationsController < DeviseController
  ...
  # GET /resource/sign_up
  def new
    redirect_to root_path
  end
  ....
end

นอกจากนี้หากต้องการลบภาพลวงตาที่เส้นทางนี้ยังสามารถเข้าถึงได้จากมุมมองอื่นคุณอาจต้องลบรหัสนี้ออกจาก app/views/devise/shared/_links.erb

<%- if devise_mapping.registerable? && controller_name != 'registrations' %>
  <%= link_to "Sign up", new_registration_path(resource_name) %><br />
<% end -%>

2

สำหรับคนอื่นในกรณีของฉัน กับ
ฉันลบเส้นทางไปยังการลงทะเบียนสำเร็จแล้ว แต่ยังคงเส้นทางที่จะแก้ไขโปรไฟล์ด้วยรหัสต่อไปนี้devise (3.5.2)

#routes.rb
devise_for :users, skip: [:registrations]
as :user do
  get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
  put '/users(.:format)' => 'devise/registrations#update', as: 'user_registration'
  patch '/users(.:format)' => 'devise/registrations#update'
end

1

นี่คือเส้นทางที่แตกต่างกันเล็กน้อยที่ฉันไป มันทำให้คุณไม่ต้องเปลี่ยนdevise/shared/_links.html.erbมุมมอง

ในapp/models/user.rb:

devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable

ในconfig/routes.rb:

devise_for :users
devise_scope :user do
  put 'users' => 'devise/registrations#update', as: 'user_registration'
  get 'users/edit' => 'devise/registrations#edit', as: 'edit_user_registration'
  delete 'users' => 'devise/registrations#destroy', as: 'registration'
end

ก่อน:

$ rake routes | grep devise
           new_user_session GET    /users/sign_in(.:format)                    devise/sessions#new
               user_session POST   /users/sign_in(.:format)                    devise/sessions#create
       destroy_user_session DELETE /users/sign_out(.:format)                   devise/sessions#destroy
              user_password POST   /users/password(.:format)                   devise/passwords#create
          new_user_password GET    /users/password/new(.:format)               devise/passwords#new
         edit_user_password GET    /users/password/edit(.:format)              devise/passwords#edit
                            PATCH  /users/password(.:format)                   devise/passwords#update
                            PUT    /users/password(.:format)                   devise/passwords#update
   cancel_user_registration GET    /users/cancel(.:format)                     devise/registrations#cancel
          user_registration POST   /users(.:format)                            devise/registrations#create
      new_user_registration GET    /users/sign_up(.:format)                    devise/registrations#new
     edit_user_registration GET    /users/edit(.:format)                       devise/registrations#edit
                            PATCH  /users(.:format)                            devise/registrations#update
                            PUT    /users(.:format)                            devise/registrations#update
                            DELETE /users(.:format)                            devise/registrations#destroy

หลังจาก:

$ rake routes | grep devise
           new_user_session GET    /users/sign_in(.:format)                    devise/sessions#new
               user_session POST   /users/sign_in(.:format)                    devise/sessions#create
       destroy_user_session DELETE /users/sign_out(.:format)                   devise/sessions#destroy
              user_password POST   /users/password(.:format)                   devise/passwords#create
          new_user_password GET    /users/password/new(.:format)               devise/passwords#new
         edit_user_password GET    /users/password/edit(.:format)              devise/passwords#edit
                            PATCH  /users/password(.:format)                   devise/passwords#update
                            PUT    /users/password(.:format)                   devise/passwords#update
          user_registration PUT    /users(.:format)                            devise/registrations#update
     edit_user_registration GET    /users/edit(.:format)                       devise/registrations#edit
               registration DELETE /users(.:format)                            devise/registrations#destroy

หากคุณไม่ต้องการมีเส้นทางสำรองให้ข้ามเส้นทางเริ่มต้นทั้งหมดเช่นdevise_for :users, skip: :all
elquimista

0

ฉันมีปัญหาเดียวกันและฉันพบว่ามันเป็นการปฏิบัติที่เลวร้ายเล็กน้อยในการเปลี่ยนเส้นทางผู้ใช้จากหน้าลงทะเบียน ดังนั้นวิธีการแก้ปัญหาของฉันก็คือไม่ได้ใช้:registrableเลย

สิ่งที่ฉันทำคือการสร้างหน้าคล้ายกันเช่นแก้ไขรายละเอียดผู้ใช้ซึ่งดูเหมือน:

<%= form_tag(update_user_update_path, method: :post) do %>  
    <br>
    <%= label_tag(:currPassword, 'Current password:') %> <%= password_field_tag(:currPassword) %> <br>
    <%= label_tag(:newPassword, 'New password:') %> <%= password_field_tag(:newPassword) %> <br>
    <%= label_tag(:newPasswordConfirm, 'Confirm new password:') %> <%= password_field_tag(:newPasswordConfirm) %> <br>
    <%= submit_tag('Update') %>
<% end %>

ดังนั้นแบบฟอร์มนี้จะส่งไปยังจุดสิ้นสุดการโพสต์ใหม่ที่อัปเดตรหัสผ่านซึ่งมีลักษณะดังนี้:

  def update
    currPass = params['currPassword']
    newPass1 = params['newPassword']
    newPass2 = params['newPasswordConfirm']
    currentUserParams = Hash.new()
    currentUserParams[:current_password] = currPass
    currentUserParams[:password] = newPass1
    currentUserParams[:password_confirmation] = newPass2
    @result = current_user.update_with_password(currentUserParams)
  end

ในภายหลังคุณสามารถใช้@resultในมุมมองของคุณเพื่อบอกผู้ใช้ว่ามีการปรับปรุงรหัสผ่านหรือไม่


0

การเปลี่ยนเส้นทางมีปัญหาอื่น ๆ มากมายที่มาพร้อมกับปัญหานั้น วิธีที่ง่ายที่สุดที่ฉันพบคือทำดังต่อไปนี้

ApplicationController < ActionController::Base
  before_action :dont_allow_user_self_registration

  private

  def dont_allow_user_self_registration
    if ['devise/registrations','devise_invitable/registrations'].include?(params[:controller]) && ['new','create'].include?(params[:action])
      redirect_to root_path
    end
  end
end

ใช้งานได้ แต่คุณต้องการใช้วิธีนี้กับทุกการกระทำหรือไม่
lacostenycoder

-7

คุณสามารถแก้ไขdeviseอัญมณีได้ ก่อนอื่นให้รันคำสั่งนี้เพื่อค้นหาตำแหน่งที่ติดตั้งไว้โดยใช้:

gem which devise

สมมติว่าเส้นทางคือ: /usr/local/lib/ruby/gems/1.9.1/gems/devise-1.4.2/lib/devise

จากนั้นไปที่

/usr/local/lib/ruby/gems/1.9.1/gems/devise-1.4.2/lib/devise/lib/devise/railsและแก้ไขroutes.rbในไดเรกทอรีนั้น มีวิธีที่เรียกว่าdef devise_registration(mapping, controllers)ซึ่งคุณสามารถปรับเปลี่ยนเพื่อกำจัดการกระทำใหม่ได้ นอกจากนี้คุณยังสามารถลบการแมปสำหรับdevise_registration


+1 สำหรับคำแนะนำทางเลือก แต่การตีอัญมณีนั้นเป็นที่ต้องการน้อยกว่าการใส่รหัสที่น่าอึดอัดใจในเส้นทางของฉัน
นาธานลอง

4
โดยทั่วไปแล้วสิ่งนี้ไม่มีขนาดใหญ่มาก! คุณควรเก็บอัญมณีเช่นที่พวกเขาและถ้าคุณต้องการบางสิ่งบางอย่างเปลี่ยนแปลงเพียงแพทช์ลิงพวกเขา
equivalent8

ฉันเห็นด้วยกับคุณในกรณีนี้ แต่โดยทั่วไปฉันไม่คิดว่าคุณควรหลีกเลี่ยงการเปลี่ยนแปลงห้องสมุด / อัญมณีที่คุณใช้เป็นทางเลือกแทนรหัสการแก้ไขลิงในที่ต่าง ๆ ความสามารถในการสร้างห้องสมุดให้ตรงกับความต้องการของคุณคือข้อดีอย่างหนึ่งของการใช้รหัสโอเพนซอร์ซ
Ankit Soni

หากคุณกำลังจะแก้ไขอัญมณีอย่างน้อยก็แยกมันออกและชี้ Gemfile ของคุณไปยังอัญมณีที่ปะติดลิง (เช่น GitHub) ฉันเคยทำมาหลายครั้งแล้ว กระบวนการคือ: ส้อมอัญมณีโคลนส้อมของคุณในท้องถิ่นลิงแพทช์รุ่นท้องถิ่นของคุณกดไปที่ repo ระยะไกลของคุณและชี้ Gemfile ไปที่มัน (เช่นgem 'devise', github: 'yourusername/devise', branch: "master")
lacostenycoder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.