मैं RoR के लिए नया हूं और इस तैयार समस्या से फंस गया हूं। मैं उपयोगकर्ताओं को ईमेल या उपयोगकर्ता नाम से साइन इन करने की अनुमति देना चाहता हूं (उपयोगकर्ता नाम के साथ पंजीकरण पहले से ही ठीक है)। Article 1 और Article 2 और आप नीचे दिए गए परिणाम देख सकते हैं:रेल 4 + देवता ईमेल या उपयोगकर्ता नाम और मजबूत पैरामीटर के साथ लॉगिन
application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :email, :password) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :password, :remember_me) }
end
end
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login]
validates_uniqueness_of :username
validates_presence_of :username
validates :username, length: { in: 4..20 }
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["lower(username) = :value OR lower(email) = :value", { :value => login.downcase }]).first
else
where(conditions).first
end
end
end
new.html.erb
मैं इन लेखों का पालन किया
<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
<div><%= f.label :login, "Pseudo ou email" %><br />
<%= f.text_field :login, :autofocus => true %></div>
...
devise.rb
... config.authentication_keys = [: लॉगिन] ...
परिणाम
Showing /home/action/workspace/rchq/app/views/devise/sessions/new.html.erb where line #5 raised:
undefined method `login' for #<User:0x000000033996a0>
मुझे समझ नहीं आता क्यों यह क्योंकि काम नहीं करता है मैंने निर्दिष्ट किया कि "sign_in" परमिट के लिए: उपयोगकर्ता के लिए लॉगिन करें।
आपको बहुत धन्यवाद, यह सिर्फ attr_accessor जोड़कर काम करता है: लॉगिन! मैंने सोचा कि "attr_accessor" को रेल मानकों के बाद मजबूत पैरामीटर द्वारा प्रतिस्थापित किया गया था। – Dragu
नहीं, attr_accessible को बहिष्कृत किया गया है। यहां और अधिक है: http://stackoverflow.com/questions/3136420/difference-between-attr-accessor-and-attr-accessible – rb512
@Dragu 'attr_accessible' को मजबूत पैरामीटर द्वारा प्रतिस्थापित किया गया था। 'attr_accessor' इस मामले में, 'login'' सेटटर/गेटर विधियों को बनाता है। यह '@ login' का एक इंस्टेंस वैरिएबल भी बना रहा है – scarver2