2012-03-10 2 views
1

처음 오랫동안 읽는 사용자. 내가 함께 처음으로 RoR에 응용 프로그램을 넣어 그리고 난 내 응용 프로그램은 아래로 사용해야하는 모든 격리했습니다 -소서리 및 간단한 양식 구현

  • 마법
  • Omniauth
  • 캉캉
  • 트위터 - 부트 스트랩 (SASS로 변환)

및 단순 양식.

깨끗하고 선명하고 단순 .....

'remember_me'필드에 오류가 발생하지 않고 Sorcery "Login"이있는 간단한 양식을 통합 할 수는 없습니다 (작업 중 가장 단순한 것).

단순 양식에는 세션 컨트롤러 새 방법의 로그인 양식에서 가장 잘 작동 할 simple_form_tag (simple_form_for) 옵션이 없습니다. 대신 그 방법으로 @user 인스턴스를 만들어야하지만 'remember_me'필드에 오류가 발생합니다 "정의되지 않은 메서드`remember_me '"

도움이 될만한 모든 도움을 주실 수 있습니다.

나는 크게 의미합니다! 사전에 거대한 고맙습니다 :)

sessions/new.html.erb 

<% provide :title, "Log in" %> 
<h1>Log in</h1> 
<%= simple_form_for @user, :html => { :class => 'form-horizontal' } do |f| %> 
    <fieldset> 
    <legend>Login</legend> 

    <%= f.input :email, input_html: { :maxlength => 100 } %> 
    <%= f.input :password, input_html: { :maxlength => 20 } %> 
    <%= f.input :remember_me, as: :boolean %> 


    <div class="form-actions"> 
     <%= f.submit nil, :class => 'btn btn-primary' %> 
     <%= link_to 'Cancel', users_path, :class => 'btn' %> 
    </div> 
    </fieldset> 
<% end %> 

    class SessionsController < ApplicationController 
    def new 
    @user = User.new 
    end 

답변

1

documentation는 말한다 :

form_tag(url_for_options = {}, options = {}, &block) 
Starts a form tag that points the action to an url configured with url_for_options just 
like ActionController::Base#url_for. The method for the form defaults to POST. 

form_tag이 컨트롤러 액션에 의해 처리 다른 URL에 직접 데이터를 전송하도록 구성되어 있음을 나타냅니다. 실제로 RailsTutorial signin form에서 Michael Hartl은 form_tag 대신 form_for 함수를 사용합니다.

form_for(:session, url: sessions_path) 

기본적으로 데이터베이스에 쓰는 대신 컨트롤러가 처리 할 데이터를 보내는 것이 아이디어입니다. 우리는 사용자 세션을위한 모델이 없기 때문에 @session 대신 :session 심볼을 사용하고 폼에 (어떤 URL) POST 데이터를 보내야하는지 알려야합니다.

의심 스럽지만 확실하지는 않지만 simple_form_for과 함께 사용해야합니다.

<%= simple_form_for(:session, url: sessions_path) do |f| %> 

업데이트 : 같은 뭔가 나는 성공적으로 새로운 사용자 세션을 생성하기위한 simple_form_for를 사용하는 샘플 응용 프로그램의 reference implementation을 변경했습니다.

물론 세션 컨트롤러가 로그인을 처리 중이며 POST (아마도 create)에 응답하는 방법이 있다고 가정합니다. 그 컨트롤러 액션은 당신이 마법사 로그인을 처리해야하는 곳입니다.

궁금한 점이 있으시면 form_for에 대한 레일스 문서를 참조하십시오.

+0

이 코드를 omniauth-identity와 함께 사용하는 방법에 대한 아이디어가 있으신가요? 나는'code'simple_form_for (: user, url : "/ auth/identity/register")'/ code'을 시도했습니다. – gittinOld

+0

사용 방법에 대한 아이디어 이 omniauth - 정체성과 함께? 나는'simple_form_for (: user, url : "/ auth/identity/register ")'. user_controller'def new @user = env [ 'omniauth.identity'] || User.new end'. 모델/user.rb 클래스 사용자 gittinOld

+0

가능한 경우 첫 번째 주석을 삭제하십시오. 네가 예상했던대로 끝나지 않았어. 내가 왜 제대로 작동하고 당신에게 Heroku에 대한 라우팅 오류를 줄 수 있을지 모르겠다. 디버깅 단계로'rake routes'를 로컬과 Heroku에서 실행해야합니다. 나는 당신이 누군가 당신에게 도움을 줄 경우 완전한 평판을 얻을 수있는 기회를주기 위해 이것을 새로운 질문으로 게시하는 것이 좋습니다. 도움이된다면 선택하신 대답을 upvote하는 것도 좋습니다. – jrhorn424

0

나는 이것을 잘하고 붙어 가려고 노력하고있다. 이것이 작동해야하지만 로그인 양식을 제출할 때 오류가 발생합니다.내 양식은 다음과 같습니다.

<h1>Log in</h1> 

<%= simple_form_for(:session, url: sessions_path) do |f| %> 

    <%= f.error_notification %> 

    <%= f.input :email %> 
    <%= f.input :password %> 
    <%= f.input :remember_me, :as => :boolean %> 

    <div class="form-actions"> 
    <%= f.submit "Login", :class => 'btn btn-primary' %> 
    </div> 
<% end %> 

<%= link_to 'Forgot Password?', new_password_reset_path %> 

잘 만드는 방법을 잘 모르겠습니다. 내 디버그 출력 양식이 올바른 데이터 보내려고 있음을 보여주고있다 : 또한

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
utf8: ✓ 
authenticity_token: wGdDEmG91p7RHzWZKLGgMQvKD+XupS1Z557vNDDG6GM= 
session: !ruby/hash:ActiveSupport::HashWithIndifferentAccess 
    email: [email protected] 
    password: test 
    remember_me: '1' 
commit: Login 
action: create 
controller: sessions 

를, "콘솔에서이 오류를 받고 있어요 I :

gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms) 

하지만 내 routes.rb 파일에 resources :sessions이 .