복붙노트

[RUBY-ON-RAILS] 다른 컨트롤러 내의 고안 양식

RUBY-ON-RAILS

다른 컨트롤러 내의 고안 양식

나는 sign_in / sign_out 절차에 대한 유증 보석을 사용하고 있습니다.

I는 레일 g 고안 뷰를 이용하여 고안 조회수 파일 생성

나는 sign_in에 대한 양식을 포함 된 유증 / 세션 / new.html.erb 파일이 있었다 보았다.

나는 다른 파일 유증 / 세션 / _form.html.erb을 만들어 아주 잘 밖으로 일 <% = 렌더링 '형식'%>은 new.html.erb 파일 내에서, 그리고했다.

지금, 나는 다른 컨트롤러에서이 양식을 포함하고 싶었다. 그래서 (특히,보기 페이지 내) '주'라는 컨트롤러에서 '전원 / index.html.erb'나는 <% = 렌더링 % '유증 / 세션 / 양식'> 파일을 포함. 포함이 벌금을 일한 것 같다, 그러나 나는 다음과 같은 오류를 얻고있다.

NameError in Mains#index

Showing /home/administrator/Ruby/site_v4_ruby/app/views/devise/sessions/_form.html.erb where line #1 raised:

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

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

form_for (자원, ...) 부분은 내가 원래 유증의 sign_in 페이지입니다 경우 벌금을 작동 문제를 (일으키는 ... 어떻게 레일 방식으로이 문제를 해결할 수 있습니다 것 같다?

나는 개인적으로 오히려 인라인 HTML 코드를 작성하는 것보다, 양식을 포함하는 기능을 사용하여 '렌더링'하는 것을 선호합니다.

나는 '주'컨트롤러 내에서 뭔가 (자원)를 지정해야합니까?

나는 당신의 도움을 주셔서 감사합니다. 감사합니다.

해결법

  1. ==============================

    1.안드레스가 말한대로가 아닌 고안 컨트롤러에서 고안 양식에 액세스 할 때, 그래서 고안에 의해 지정되고 양식 통화 도우미는 존재하지 않습니다.

    안드레스가 말한대로가 아닌 고안 컨트롤러에서 고안 양식에 액세스 할 때, 그래서 고안에 의해 지정되고 양식 통화 도우미는 존재하지 않습니다.

    이 문제를 해결하기 위해, 당신은 아래의 양식을 표시하고자하는 컨트롤러의 헬퍼 클래스에 다음과 같은 방법을 추가해야합니다. 양자 택일로, 당신은 그냥 어디서나 흔히 볼 수 있도록 응용 프로그램 도우미에 추가 할 수 있습니다.

      def resource_name
        :user
      end
    
      def resource
        @resource ||= User.new
      end
    
      def devise_mapping
        @devise_mapping ||= Devise.mappings[:user]
      end
    

    출처 : http://pupeno.com/blog/show-a-devise-log-in-form-in-another-page/

  2. ==============================

    2.이 질문을 확인 ...이 시도 할 수 있습니다.

    이 질문을 확인 ...이 시도 할 수 있습니다.

    출처

    <%= form_for("user", :url => user_session_path) do |f| %>
      <%= f.text_field :email %>
      <%= f.password_field :password %>
      <%= f.check_box :remember_me %>
      <%= f.label :remember_me %>
      <%= f.submit 'Sign in' %>
      <%= link_to "Forgot your password?", new_password_path('user') %>
    <% end %> 
    
  3. ==============================

    3."자원」을 책정 통해 정의되기 때문에 고안 컨트롤러에서 렌더링 할 때 양식 당신은 작품을 만들었습니다. 당신이 "새로운"행동을 복제하려고하는지 이해에서 - 유증 SessionsController의 구현을 살펴보십시오. 방법 "build_resource"는 후에 무엇을 찾고있어 아마.

    "자원」을 책정 통해 정의되기 때문에 고안 컨트롤러에서 렌더링 할 때 양식 당신은 작품을 만들었습니다. 당신이 "새로운"행동을 복제하려고하는지 이해에서 - 유증 SessionsController의 구현을 살펴보십시오. 방법 "build_resource"는 후에 무엇을 찾고있어 아마.

    은 "자원"객체가 어디에서 오는지 소장 보석이다. 당신이 깊이 파고하고자하는 경우, 그 모습에 장소가 될 것입니다.

  4. ==============================

    4.허용 대답에 구체화, 우리는 자원의 다른 유형을 허용하려면이 도우미를 사용 :

    허용 대답에 구체화, 우리는 자원의 다른 유형을 허용하려면이 도우미를 사용 :

    def resource_name
      @resource_name ||= if admin_controller?
        :admin_user
      else
        :user
      end
    end
    
    def resource
      @resource ||= resource_name.to_s.classify.constantize.new
    end
    
    def devise_mapping
      @devise_mapping ||= Devise.mappings[resource_name]
    end
    

    어디 admin_controller? 핸들 로그인 리디렉션에 우리가와 ApplicationController에 앞에서 무언가이다 :

    def admin_controller?
      !devise_controller? and request.path =~ /^\/admin/
    end
    helper_method :admin_controller?
    
  5. ==============================

    5.저도 같은 오류가 지역 변수 또는 메소드 "자원"내 컨트롤러 기본 클래스는 다음과 누락 되었기 때문에 당신이 내 컨트롤러 중 하나에서 설명 (레일-API의 ActionController :: API가 잘못했다를) 정의되지 얻고 있었다 :

    저도 같은 오류가 지역 변수 또는 메소드 "자원"내 컨트롤러 기본 클래스는 다음과 누락 되었기 때문에 당신이 내 컨트롤러 중 하나에서 설명 (레일-API의 ActionController :: API가 잘못했다를) 정의되지 얻고 있었다 :

    include ActionController::Helpers
    

    따라서 유증에서 도우미 메서드는 뷰에서 확인할 수 없습니다.

    레일-API와 유증 작동하려면 내가 포함 할 필요가 :

    class ApplicationController < ActionController::API
    
      include AbstractController::Rendering
      include AbstractController::Layouts
      include ActionController::MimeResponds
      include AbstractController::Translation
      include ActionController::ImplicitRender
      include ActionController::Helpers
    
  6. from https://stackoverflow.com/questions/4081744/devise-form-within-a-different-controller by cc-by-sa and MIT license