2012-11-12 35 views
1

我有一個錯誤,希望有人可以幫助,並給我一些線索如何處理這個。我在選擇的方式如下敏捷開發的書,雖然我複製了他們的代碼,結果如下:路由錯誤沒有路由匹配[郵政]「/會議/新」

Routing Error 
No route matches [POST] "/sessions/new" 
Try running rake routes for more information on available routes. 

這是我在我的routes.rb文件:

get 'admin' => 'admin#index' 
controller :sessions do 
get 'login' => :new 
post 'login' => :create 
delete 'logout' => :destroy 
end 
resources :users 

在我session_controller: skip_before_filter:授權 高清新 結束

def create 
user = User.find_by_name(params[:login_name]) 
if user and user.authenticate(params[:password]) 
    session[:user_id] = user.id 
    redirect_to admin_url 
else 
    redirect_to login_url, alert: "Invalid user/password combination" 
end 
end 

def destroy 
session[:user_id] = nil 
redirect_to users_url, notice: "Logged out" 
end 

在我的會議#new.html.erb :

<% if flash[:alert] %> 
    <p id="notice"><%= flash[:alert] %></p> 
<% end %> 
<%= form_tag do %> 
    <fieldset> 
    <legend>Please Log In</legend> 
    <div> 
     <%= label_tag :login_name, 'Login name:' %> 
     <%= text_field_tag :login_name, params[:login_name] %> 
    </div> 
    <div> 
     <%= label_tag :password, 'Password:' %> 
     <%= password_field_tag :password, params[:password] %> 
    </div> 
    <div> 
     <%= submit_tag "Login" %> 
    </div> 
    </fieldset> 
<% end %> 

另外我正在使用has_secure_password並且最近更新到Ruby v 193和Rails 3.2.8。我只是還在學習ROR,因此會很感激你的幫助 - 我一直在努力弄清楚自己,但我無法做到。

回答

1

您目前正在發佈到表單所在的同一頁面。 由於您的視圖是sessions控制器中的new操作,因此它將POST提交到sessions/new。然後Rails正在尋找POST路由到sessions#new。由於不存在,它是錯誤的。

但是,如果你看看你的路線,你可以看到你有一個post 'login' => :create路線,實際上去你設置的create行動來處理表單提交。因此,如果您將表單提交到/login,則該路線將很好地將所有內容發佈到預期的操作。

要做到這一點,更改:

<%= form_tag do %> 

<%= form_tag('/login') do %> 

另外,我強烈建議你閱讀本:http://guides.rubyonrails.org/routing.html,這將給你如何軌路由的作品更好的概述。

編輯: 我剛纔看到你很可能重新提交到/登錄,然後應該工作... 我認爲它還是會默認爲提交然而,當前的動作是正式會議/新,所以你可以給我的建議去看看它是否有所作爲?

0

運行'耙路線'時會得到什麼?你能複製那個嗎?另外,你能否複製表單瀏覽器呈現的HTML代碼?