2012-02-04 13 views
0
<%= link_to 'show', :controller=>:users, :action=>:show, :id=>u.id, :confirm=>'are you sure?' %> 
<%= link_to 'reset pass.', :controller=>:users, :action=>:reset_password, :id=>u.id, :confirm=>'RESET PASSWORD, are you sure?' %> 

最初のリンクが正常に動作しますが、2番目は本当に不思議です...時にはそれが動作し、時にはISないと、このようなエラーが発生します。link_toに何か問題がありますか?

LoadError in UsersController#index

Expected /home/anonym/Documents/RubyOnRails/authorisation/loginout/app/controllers/users_controller.rb to define UsersController

また、それは確認が表示されませんボックス。とにかく私は削除する場合:最初のエラーはとにかく時々発生するオプションを確認します。

コントローラー:

#users_controller.rb 
class UsersController < ApplicationController 
... 
def reset_password 
    @user=User.find_by_id(params[:id]) 
... 

ルート:

#routes.rb 
match 'users/:id/reset_password', :to=>"users#reset_password" 

それが毎回失敗したが、それは一種のランダムだされた場合、それは私には理解しやすいかもしれません。

なぜでしょうか?

UPDATE

コントローラでこの小さな変更は、問題を解決するように見えました。

#Thread.new{UserMailer.reset_password(@user, passwd).deliver} 
UserMailer.reset_password(@user, passwd).deliver 

これにより、私のリンクが非常に速く数回クリックされると、sqliteデータベースが崩壊してしまいました。

なぜこのスレッドがこのようなキラーであったのでしょうか?

まだ確認ボックスがないのはなぜですか?

UPDATEそのデータベースが壊れた後

Started GET "https://stackoverflow.com/users/2/reset_password?confirm=RESET+PASSWORD%2C+are+you+sure%3F" for 127.0.0.1 at 2012-02-06 15:03:57 +0100 
    Processing by UsersController#reset_password as HTML 
    Parameters: {"confirm"=>"RESET PASSWORD, are you sure?", "id"=>"2"} 
    [1m[36mUser Load (0.2ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1[0m 
    [1m[35mUser Load (0.4ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1 
    [1m[36m (0.5ms)[0m [1mSELECT 1 FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 2) LIMIT 1[0m 
    [1m[35m (0.3ms)[0m UPDATE "users" SET "last_support_email_sent_time" = '2012-02-06 14:03:58.182567', "encrypted_password" = '5380187f533d14e2867667f8c2c9dc6671b1d930ff892a8cb4da7cdda99d01c8', "updated_at" = '2012-02-06 14:03:58.186194' WHERE "users"."id" = 2 
Rendered /home/anonym/Documents/RubyOnRails/authorisation/loginout/app/views/user_mailer/reset_password.html.erb (0.2ms) 

Sent mail to [email protected] (1270ms) 
Date: Mon, 06 Feb 2012 15:03:58 +0100 

from: User service 

To: [email protected] 

Message-ID: <[email protected]> 

Subject: Your new password 

Mime-Version: 1.0 

Content-Type: text/html; 

charset=UTF-8 

Content-Transfer-Encoding: 7bit 



Hello ,</br> 

Your new password is: 469ff56728 

Redirected to http://localhost:3000/users 
Completed 302 Found in 1407ms 


Started GET "/users" for 127.0.0.1 at 2012-02-06 15:03:59 +0100 
    Processing by UsersController#index as HTML 
    [1m[36mUser Load (0.3ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1[0m 
    [1m[35mUser Load (1.1ms)[0m SELECT "users".* FROM "users" ORDER BY email 
Rendered shared/_add_to_user_index_row.html.erb (0.1ms) 
Rendered shared/_add_to_user_index_row.html.erb (0.1ms) 
Rendered shared/_add_to_user_index_row.html.erb (0.1ms) 
Rendered shared/_add_to_user_index_row.html.erb (0.1ms) 
Rendered shared/_add_to_user_index_row.html.erb (0.1ms) 
Rendered shared/_add_to_user_index_row.html.erb (0.2ms) 
Rendered /home/anonym/Documents/RubyOnRails/authorisation/loginout/app/views/users/index.html.erb within layouts/application (75.8ms) 
Completed 200 OK in 197ms (Views: 132.5ms | ActiveRecord: 2.6ms) 


Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /jquery_ujs.js - 304 Not Modified (0ms) 


Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /application.css - 304 Not Modified (0ms) 


Started GET "/assets/loginout.css" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /loginout.css - 404 Not Found (39ms) 

ActionController::RoutingError (No route matches [GET] "/assets/loginout.css"): 


Rendered /usr/local/rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (2.1ms) 


Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /jquery.js - 304 Not Modified (1ms) 


Started GET "/assets/messages.js?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /messages.js - 304 Not Modified (1ms) 


Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /application.js - 304 Not Modified (2ms) 


Started GET "/assets/auth_engine.css?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /auth_engine.css - 304 Not Modified (2ms) 


Started GET "/assets/sessions.css?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /sessions.css - 304 Not Modified (0ms) 


Started GET "/assets/users.css?body=1" for 127.0.0.1 at 2012-02-06 15:04:00 +0100 
Served asset /users.css - 304 Not Modified (0ms) 


Started GET "/users" for 127.0.0.1 at 2012-02-06 15:04:35 +0100 
SQLite3::SQLException: unsupported file format:   SELECT name 
      FROM sqlite_master 
      WHERE type = 'table' AND NOT name = 'sqlite_sequence' 

ActiveRecord::StatementInvalid (SQLite3::SQLException: unsupported file format:   SELECT name 
      FROM sqlite_master 
      WHERE type = 'table' AND NOT name = 'sqlite_sequence' 
): 

- サーバの再起動は役立ちません。これは私がもはやスレッドを使用しなくても時々発生します。

+0

使用しているRailsのバージョンは?それは3.0か、それとももっと最近ですか?あなたは失敗後にあなたのdevelopment.logに含まれているものを投稿できますか? – Ryan

+0

@Ryanレールを使用しています。開発ログが質問に追加されました。 – gisek

答えて

0

Railsはスレッドセーフではありません。あなたがバックグラウンド処理を実行する必要がある場合は、確認のためのようSpawnまたはDelayedJob

のようなものを使用し、あなたのアプリ/資産/ javascriptのフォルダにapplication.jsを持っていない、とあなたは<頭の中で<%= javascript_include_tag "application" %>を持っていますあなたのレイアウトの>?

application.jsファイルがロードされていない場合、Rails JSは実行されません。これには確認が含まれます。

更新:今問題が表示されます。 link_toメソッドには2つのタイプのオプションがあります。まず、ルーティングのオプションとHTMLのオプションの2つのオプションがあります。 :確認がHTMLオプションの1つです。

あなたは、ルーティングおよびHTMLオプションを渡すつもりなら、あなたはそのように、まず自分自身のハッシュへのルーティングオプションを分離する必要があります。

<%= link_to 'show', { :controller=>:users, :action=>:show, :id=>u.id }, :confirm=>'are you sure?' %> 

<%= link_to 'reset pass.', { :controller=>:users, :action=>:reset_password, :id=>u.id }, :confirm=>'RESET PASSWORD, are you sure?' %> 

ログが示すように、あなたの確認として渡されています生成された要素のHTMLに含まれるのではなく、link_toによって生成されたパスの一部です。

+0

はい、上記のリンクにはとにかく確認があります。たぶんそれは安らかなものにのみ適用されますか? – gisek

関連する問題