5

मैं बस डेविस और रेल 3 के साथ शुरू कर रहा हूं। मेरे पास ऑथरनेटिकेशन है और मूल बातें समझ रही है और समझती है।डिवाइज कोड = 0 अप 3/कोड कोड में कहीं और आंशिक रूप से आंशिक रूप से

अब मेरे गृह नियंत्रक में जो मेरे होम/फ्रंट पेज का प्रतिनिधित्व करता है, मेरे पास दो लिंक हैं जो रजिस्टर => sign_up से लिंक करते हैं और जो लॉगिन/लॉगआउट => sign_in/sign_out के आधार पर बदलते हैं।

हालांकि मैं अपने उपयोगकर्ता को लॉगिन पृष्ठ पर रीडायरेक्ट नहीं करना चाहता हूं। इसके बजाय मैं अपने लॉगिन पेज को अपने फ्रंट पेज पर प्रदर्शित करना चाहता हूं। इसलिए मैंने devise/session/new टेम्पलेट int को एक दृश्य और _form.html.erb आंशिक रूप से अलग किया है।

और अब मेरे घर ध्यान में रखते हुए मैं के रूप में तो लॉगिन प्रपत्र प्रस्तुत करना:

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, :autofocus => true %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div> 
    <% end -%> 

    <div><%= f.submit "Sign in" %></div> 
<% end %> 

मेरे त्रुटि इस प्रकार है के रूप में:

NameError in Home#index 

Showing devise/sessions/_form.html.erb where line #1 raised: 

undefined local variable or method `resource' for #<#<Class:0x614ec68>:0x6157ff8> 
Extracted source (around line #1): 

1: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
2: <div><%= f.label :email %><br /> 
3: <%= f.email_field :email, :autofocus => true %></div> 
4: 

<% if user_signed_in? %> 
    Welcome: <b><%= current_user.username %> (<%= current_user.group.name %>)</b> 
    <%= link_to "Logout", destroy_user_session_path, :method => 'delete' %> 
<% else %> 
    <%= render 'devise/sessions/form' %> // Rendering the partial here 
    <%= link_to "Login", new_user_session_path %> 
<% end %> 
<hr> 

यह आंशिक के कोड है

मुझे समझ में आता है कि त्रुटि क्यों होती है। ऐसा इसलिए है क्योंकि आंशिक इसे संसाधन विशेषता नहीं दी जा रही है। मैं dump(resource) का इस्तेमाल किया और यह पता चला है कि यह एक उपयोगकर्ता मॉडल/वस्तु तो मैं इसे करने से पहले निम्न जोड़ दिया जाता है:

<% if @user %> 
    <% resource = @user %> 
<% end %> 

और मेरे मुख नियंत्रक सूचकांक विधि के लिए निम्न इससे जोड़ा गया: है कि मैं पाने के बाद

def index 
    @user = User.new 
end 

हालांकि resource_name त्रुटि जो :user हो जाती है और यदि मैं इसे सेट करता हूं तो मुझे devise_mapping.rememberable? की समस्या है जो मुझे नहीं पता कि कैसे प्रदान किया जाए।

मैं इसे ठीक से करना चाहता हूं इसलिए मैं शुरूआत में गन्दा और अनौपचारिक दृष्टिकोण से बचना चाहता हूं।

उत्तर

17

इस सवाल का जवाब पर एक नज़र डालें: Devise form within a different controller

रूप से आप अपने घर नियंत्रक के साथ प्रस्तुत करने के लिए प्रयास कर रहे हैं कि एक गैर-वसीयत नियंत्रक से सुलभ नहीं हैं वसीयत द्वारा परिभाषित सहायकों पर निर्भर करता है।

अपने home_helper.rb करने के लिए आवश्यक सहायकों शामिल करने से आपकी समस्या का समाधान करना चाहिए:

def resource_name 
:user 
end 

def resource 
@resource ||= User.new 
end 

def devise_mapping 
@devise_mapping ||= Devise.mappings[:user] 
end 
4

मैं वसीयत 3.5.1 का उपयोग कर रहा है और मैं resource_class जोड़ने के लिए और साथ ही लॉगिन एक अलग पर काम कर फार्म पाने के लिए था नियंत्रक।

मैंने इसे application_helper.rb में जोड़ा ताकि यह मेरे सभी नियंत्रकों पर लागू हो।

def resource_name 
    :user 
end 

def resource 
    @resource ||= User.new 
end 

def devise_mapping 
    @devise_mapping ||= Devise.mappings[:user] 
end 

def resource_class 
    devise_mapping.to 
end 
संबंधित मुद्दे