साइन अप करने के लिए मैं डेविस मार्ग कैसे निकालूं?


147

मैं एक रेल 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_for :users, path_names: {
  sign_up: ''
}

4
मुझे वास्तव में लगता है कि आपका मूल समाधान अधिक सरल और स्पष्ट था। क्या इसके साथ कोई वास्तविक समस्या है सुरक्षा वार?
counterbeing

किसी कारण से आपके अपडेट किए गए समाधान में यह कहते हुए त्रुटि डाली गई कि मुझे आईडी की आवश्यकता है। एक घंटे के बालों को खींचने और कई सर्वरों को फिर से शुरू करने के बाद, यह किसी तरह खुद को ठीक करता है। मुझे कोई पता नहीं है ... लेकिन अगर कोई और अनुभव करता है, तो कोशिश करते रहें!
एरिक ट्रॉटमैन

@ एनकाउंटरिंग - कोई समस्या नहीं जो मुझे पता है, मुझे सिर्फ अप्रयुक्त मार्ग होने या ऑर्डर करने पर भरोसा करना पसंद नहीं था।
नाथन लॉन्ग

1
"वास्तविक उत्तर" मार्ग को पूरा नहीं करता है यदि यह डेविस नियंत्रक के भीतर से पुनर्निर्देशित होता है। डिफ़ॉल्ट व्यवहार फिर भी आपको साइन-अप पथ पर ले जाएगा यदि आपने GET मार्ग को पसंद किया है https://example.com/users/। नीचे मेरा जवाब देखें।
लेकोस्टेनकोडर '

1
सुरक्षा ज्वाला! "वास्तविक उत्तर" जो केवल साइन-अप फॉर्म से छुटकारा पाने के लिए दिखाया गया है, यह POST मार्ग से छुटकारा नहीं दिलाता है जो वास्तव में उपयोगकर्ता बनाता है।
एरिक टेरी

जवाबों:


54

मैंने भी ऐसा करने की कोशिश की, लेकिन वसीयत पर एक समूह ने मुझे एक बहुत साफ समाधान खोजने से रोक दिया।

मैं जोस वलीम (डेविस मेंटेनर) का उद्धरण दूंगा:

कोई सीधा-सीधा विकल्प नहीं है। आप या तो एक पैच प्रदान कर सकते हैं या उपयोग कर सकते हैं: Skip =>: रजिस्टर करने योग्य है और केवल इच्छित मार्ग जोड़ें।

मूल प्रश्न था:

क्या रेल से किसी विशिष्ट मार्ग (डिलीट रूट) को हटाने का कोई अच्छा तरीका है?


4
काफी सही। वास्तव में, मैंने एक पैच प्रस्तावित किया और उसने विनम्रता से मना कर दिया: "आज, आप पूरे नियंत्रक को छोड़ सकते हैं। उपयोग के मामले में यह इष्टतम नहीं है, लेकिन पूरे नियंत्रक के लिए मार्गों को मैन्युअल रूप से सेट करना बहुत सीधा है। मेरा मानना ​​है कि मार्गों को छोड़कर। नाम से बस रूट जनरेशन कोड को और अधिक जटिल बनाने जा रहा है (क्योंकि यह पहले से है) क्योंकि हम रेल सहायकों (जैसे संसाधन, संसाधन और दोस्त) का उपयोग करने में सक्षम नहीं होंगे ”। github.com/plataformatec/devise/issues/…
नाथन लॉन्ग

2
मुझे नहीं पता कि यह ऐसा मामला था जब यह जवाब मूल रूप से लिखा गया था, लेकिन जोस के उद्धरण में कोड गलत है। डेविस 3.4.1 में यह :skip => :registrationsनहीं है :skip => :registerable
जीएमए

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, जिसकी मुझे आवश्यकता है। जैसा कि मैंने कहा, "उन्हें अभी भी अपने प्रोफाइल को संपादित करने में सक्षम होना चाहिए।"
नाथन लॉन्ग

1
आह, ठीक है, अच्छी तरह से मैं सामान्य रूप से इसे rails_admin मणि स्थापित करके गोल करता हूं , जो उपयोगकर्ताओं को localhost:3000/adminउनके खाते को संपादित करने की अनुमति देता है , यहां तक ​​कि हटाए जाने योग्य ऑब्जेक्ट के साथ भी वे अपना खाता संपादित कर सकते हैं। यदि यह एक व्यवहार्य समाधान नहीं है, तो कैनकैन पर एक नज़र डालें, जो आपको निर्धारित करने की अनुमति देता है कि कौन संसाधन तक पहुंच नहीं सकता है। मैं 'व्यवस्थापक' या 'मॉडरेटर' जैसी भूमिकाएं जोड़ना चाहता हूं और बाकी सभी को साइन_अप पृष्ठों से बाहर कर देता हूं।
Stephenmurdoch

28
उपयोगकर्ताओं को अपने स्वयं के प्रोफाइल को संपादित करने का एक तरीका प्रदान करने के लिए एक व्यवस्थापक अनुभाग (जो मनमाने रिकॉर्ड के संपादन की अनुमति देने के लिए बनाया गया है) का उपयोग करना सबसे बुरा विचार है जिसे मैंने लंबे समय में सुना है। कृपया कोई भी ऐसा न करें
जेरेमी

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]

धन्यवाद वास्तव में मैं क्या देख रहा था। इस समाधान का उपयोग करने वाले अन्य लोगों के लिए, मुझे पुट रूट की परिभाषा में / / आईडी को जोड़ना होगा।
जॉन

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 / path.rb" में आप इसे जोड़ सकते हैं:

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

इसे इस तरह छोड़ने से आप मानक प्रोफ़ाइल का उपयोग करके अपनी प्रोफ़ाइल संपादित कर सकेंगे। यदि आप चाहें तो आप अभी भी शामिल करके संपादित प्रोफ़ाइल विकल्प को ओवरराइड कर सकते हैं

  def update
  end

में "एप्लिकेशन / नियंत्रक / 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अत्यधिक क्रिया किए बिना नामित मार्गों (जैसे ) के लिए डिफ़ॉल्ट नाम देता है ।

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_for" से पहले रखकर "devise_scope" को ओवरराइड कर सकते हैं।

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

devise_for :users

निश्चित नहीं है कि यह सबसे अच्छा तरीका है, लेकिन इसका समाधान वर्तमान में है, क्योंकि यह पृष्ठ में साइन इन करने के लिए पुनर्निर्देशित करता है।


1
मैंने एक समान दृष्टिकोण लिया, लेकिन चाहता था कि URL भी बदल जाए, इसलिए `get" / users / sign_up "के साथ गया:: to => redirect (" / ")`
dinjas

इतना सरल और सबसे आसान हल। लेकिन इस समाधान में एक मिनट की समस्या है। पता बना हुआ है। यदि आप प्रवेश करते हैं /users/sign_upतो आप पहुंच sites#indexनहीं पाएंगे, sign_upलेकिन फिर भी पता नहीं रहेगा /users/sign_up
पेंगुइन

5

मुझे @ अधिकतम उत्तर पसंद आया , लेकिन जब मैं इसका उपयोग करने की कोशिश कर रहा था तो मैं devise_mappingशून्य होने के कारण एक त्रुटि में भाग गया ।

मैंने उनके समाधान को थोड़ा संशोधित किया जो इस मुद्दे को हल करने के लिए लगता है। इसमें कॉल को resourceअंदर तक लपेटना आवश्यक था devise_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

पेज को साइन इन करने के लिए, इसे ठीक करने के लिए अब आपको एक त्रुटि मिलेगी। इसमें यह परिवर्तन करें: एप्लिकेशन / विचार / वसीयत / साझा / _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मॉडल में निकालना पड़ा ।
दुसान

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

काम करता है, लेकिन क्या आप वास्तव में हर एक क्रिया पर इस विधि को चलाना चाहते हैं?
लैकोस्टेनकोडर 20

-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
सामान्य तौर पर यह बड़ा नहीं-नहीं है! आपको रत्नों को रखना चाहिए जैसे वे हैं और यदि आपको कुछ बदलने की आवश्यकता है तो उन्हें बंदर पैच दें
बराबर 8

मैं इस मामले में आपके साथ सहमत हूं, लेकिन सामान्य तौर पर मुझे नहीं लगता कि आपको विभिन्न स्थानों के झुंड में बंदर पैचिंग कोड के विकल्प के रूप में उपयोग किए जाने वाले पुस्तकालयों / रत्नों में बदलाव करने से शर्म नहीं करनी चाहिए। एक पुस्तकालय को अपनी आवश्यकताओं के अनुसार ढालने की क्षमता ओपन-सोर्स कोड IMO का उपयोग करने के बड़े प्लस में से एक है।
अंकित सोनी

यदि आप मणि को संशोधित करने जा रहे हैं, तो कम से कम इसे फोर्क करें और अपने मणिफाइल को अपने बंदर पैच वाले मणि (उदाहरण के लिए गीथब पर) पर इंगित करें। मैंने कई मौकों पर ऐसा किया है। प्रक्रिया है: कांटा मणि, स्थानीय रूप से अपने कांटे को क्लोन करें, बंदर अपने स्थानीय संस्करण को पैच करें, अपने दूरस्थ रेपो को धक्का दें और इसके लिए जेमफाइल को इंगित करें। (यानी gem 'devise', github: 'yourusername/devise', branch: "master")
लैकोस्टेनकोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.