2012-10-29 3 views
2

사용자가 프로젝트를 데이터베이스에 입력 할 수있는 응용 프로그램이 있습니다.이 응용 프로그램을 사용하면 나중에 데이터베이스를 검색 할 수 있습니다. 각 사용자는 시스템 관리자가 제공하는 자체 로그인을 가지고 있습니다. 사용자가 처음으로 로그인하면 일반 홈페이지에 "비밀번호 변경"보기가 표시되어 사용자가 앱을 사용하기 전에 비밀번호를 변경해야합니다.Ruby on Rails : 처음 로그인시 암호 변경

새 테이블을 만들 때 사용자 테이블에 pass_change 부울 열 (false)을 설정했습니다.

처음 사용자가 처음 로그인하면 암호 변경보기로 이동하지만이 기능을 테스트하면 암호가 변경되지 않고보기가 변경되지 않습니다. 새 비밀번호이며 해당 사용자의 pass_changetrue으로 변경되지 않습니다.

인덱스보기 :

<html> 
<% if current_user.pass_changed == true %> 

    <%= stylesheet_link_tag "index"%> 
<body> 

<div id = "section1"> 
<div class = "h1">Database Search</div> 

    <div class = "h3">What would you like to do?</div> 



<div class="new_project_button"> 
<%= button_to "Create New Project", new_project_path, :class => "button", :method => "get" %> 
</div> 
<div class="search_button"> 
<%= button_to "  Search  ", search_path, :class => "button", :method => "get" %> 
</div> 
</div> 


</body> 

<%else%> 


<div class ="title">Change your password</div><%= current_user.pass_changed %> 


<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %> 
    <%= devise_error_messages! %> 

<div class = "signin"> 


<div class = "field">New Password: 
    <%= f.password_field :password, :class => "password" %> 
    </div> 

    <div class = "field">Confirm: 
    <%= f.password_field :password_confirmation, :class => "password" %> 
    </div> 

         <%= f.hidden_field :pass_changed, :value => true %> 
    <div class = "signup_button"><%= f.submit "Change my password", :class => "button" %> 
    </div> 

</div> 
<% end %> 
<% end %> 


</html> 

응용 프로그램 도우미 :

module ApplicationHelper 

    def resource_name 
    :user 
    end 

    def resource 
    @resource ||= User.new 
    end 

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

사람이 내가 잘못 일을 할 수있는 무엇을 볼 수 있을까요? 나는 인증을 처리하기 위해 devise gem을 사용하고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다. 미리 감사드립니다.

업데이트 : 암호를 변경하려고 할 때

다음

내 로그를 다음과 같습니다

내 인덱스 뷰는 이제 다음과 같습니다
Started PUT "https://stackoverflow.com/users/password" for 127.0.0.1 at 2012-10-29 14:15:05 +0000 
Processing by Devise::PasswordsController#update as HTML 
    Parameters: {"utf8"=>"Ô£ô", "authenticity_token"=>"eBU5jvN6C+JSIZNmsEaxUyydrvPRjtGZeWLxlQzFJKI=", "user"=>{"password"= 
>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "pass_changed"=>"true"}, "commit"=>"Change my password"} 
    ←[1m←[35mUser Load (0.0ms)←[0m SELECT "users".* FROM "users" WHERE "users"."id" = 7 LIMIT 1 
Redirected to http://localhost:3000/ 
Filter chain halted as :require_no_authentication rendered or redirected 
Completed 302 Found in 0ms (ActiveRecord: 0.0ms) 


Started GET "/" for 127.0.0.1 at 2012-10-29 14:15:05 +0000 
Processing by ProjectsController#index as HTML 
    ←[1m←[36mUser Load (0.0ms)←[0m ←[1mSELECT "users".* FROM "users" WHERE "users"."id" = 7 LIMIT 1←[0m 
    ←[1m←[35mProject Load (0.0ms)←[0m SELECT "projects".* FROM "projects" 
    Rendered projects/index.html.erb within layouts/application (0.0ms) 
Completed 200 OK in 16ms (Views: 15.6ms | ActiveRecord: 0.0ms) 

:

<html> 
<% if current_user.pass_changed == true %> 

    <%= stylesheet_link_tag "index"%> 
<body> 

<div id = "section1"> 
<div class = "h1">Database Search</div><%= current_user.pass_changed %> 

    <div class = "h3">What would you like to do?</div> 



<div class="new_project_button"> 
<%= button_to "Create New Project", new_project_path, :class => "button", :method => "get" %> 
</div> 
<div class="search_button"> 
<%= button_to "  Search  ", search_path, :class => "button", :method => "get" %> 
</div> 
</div> 


</body> 

<%else%> 

<%= form_for(current_user, :as => :user, :url => password_path(current_user), :html => { :method => :put }) do |f| %> 
    <%= devise_error_messages! %> 

<div class = "signin"> 


<div class = "field">New Password: 
    <%= f.password_field :password, :class => "password" %> 
    </div> 

    <div class = "field">Confirm: 
    <%= f.password_field :password_confirmation, :class => "password" %> 
    </div> 

         <%= f.hidden_field :pass_changed, :value => true %> 
    <div class = "signup_button"><%= f.submit "Change my password", :class => "button" %> 
    </div> 

</div> 
<% end %> 
<% end %> 


</html> 

내 사용자 모델에

I 추가 된 내용 :

after_update :update_pass_changed 

def update_pass_changed 
    self.pass_changed = true 
    self.save 
end 

답변

0

이가 당신을 위해 도움이 될 수 있습니다하려고 당신은 내가 내 프로젝트 모델에 코드를 추가

after_create :update_pass_change 

def update_pass_change 
    self.pass_change = true 
    self.save 
end 

또는

def update_pass_change 
    self.update_attributes(:pass_change => true) 
end 
+0

모델에 쓰고, 아무것도 변경되지 않습니다. 나는 또한 내 사용자 모델을 시도했다. 오해했다. – Jazz