2010-10-12 60 views
1

我很抱歉我的英語不好。 幾個小時前我剛剛安裝了ruby和rails(你不會相信我花了3天的時間在這臺ubuntu 10.04機器上安裝ruby,rvm,rails等),我試圖實現基本的成員腳手架。我的rails版本是3.0.0,我的ruby是1.9.2。MemberController中的ActiveRecord :: RecordNotFound#show

當我#rails generate scaffold Member email:string password:string它創建了各種文件。我也做了#rake db:migrate在mysql中實現數據庫。 因此,在成員控制器中,我看到我必須通過127.0.0.1:3000/members/才能進入基本的腳手架設置。

我只是改變

def new 
    @member = Member.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @member } 
    end 
end 

以上成員控制器語句轉換爲

def register 
    @member = Member.new 

    respond_to do |format| 
    format.html # new.html.erb 
    format.xml { render :xml => @member } 
    end 
end 

你看到的,我剛換了新到寄存器,而現在,當我試圖進入 127.0。 0.1:3000 /會員/註冊 ActiveRecord::RecordNotFound錯誤出現。 我該如何解決這個問題? 我只想讓 127.0.0.1:3000/members/register 是一個網頁,用戶可以註冊..

順便說一句,這個回報率似乎是非常複雜的,和API文檔似乎過於寬泛被初學者理解。我上週下令RoR的書,所以我會看看怎麼回事......

回答

0

您需要的方法添加「註冊」路線,如: -

map.connect「/會員/註冊」, :controller =>'members',:action =>'register'。

將上面的內容添加到routes.rb後,重新啓動服務器。

謝謝,Anubhaw

+1

你的意思只是把 - > map.connect'/ members/register',:controller =>'members',:action =>'register'< - 在route.rb文件中?我這樣做了,但我得到了一個未定義的局部變量或方法'映射'爲#(NameError) – pavlo 2010-10-12 08:00:26

+0

您需要將上面的行放在類似ActionController :: Routing :: Routes .draw do | map | map.connect'/ members/register',:controller =>'members',:action =>'register'end – Anubhaw 2010-10-12 08:13:27

+0

我不確定這是否適用於rails 3.路由已經發生了相當大的變化。 – Shadwell 2010-10-12 08:33:07

5

通過使用腳手架發電機成員被映射爲資源。看在config/routes.rb

resources :members 

當實體被映射爲資源,他們獲得了一組默認路由。您可以通過執行rake routes

members GET  /members(.:format)   {:action=>"index", :controller=>" members"} 
members POST /members(.:format)   {:action=>"create", :controller=> "members"} 
new_member GET /members/new(.:format)  {:action=>"new", :controller=>"members"} 
edit_member GET /members/:id/edit(.:format) {:action=>"edit", :controller=>"members"} 
member GET  /members/:id(.:format)  {:action=>"show", :controller=>"members"} 
member PUT  /members/:id(.:format)  {:action=>"update", :controller=>"members"} 
member DELETE /members/:id(.:format)  {:action=>"destroy", :controller=>"members"} 

看到你的所有映射路徑當您重命名new行動register也不再是該映射的有效途徑。

你可以做的就是離開行動new和只添加你routes.rb

match 'members/register' => 'members#new' 

這樣下面的路線,你不要在支架打破其他事情。如果你真的想重新註冊行動,我建議不要使用腳手架。

+0

嗨,謝謝你的好回答。現在我瞭解了軌3如何完成映射。 :) – pavlo 2010-10-15 04:34:42

+0

再次嗨。如果我想設置類似 – pavlo 2010-10-15 04:45:45

+0

edit_password_member GET /members/:id/edit_password(.:format){:action =>「edit_password」,:controller =>「members」} 我該怎麼做?在'路線'文件中? – pavlo 2010-10-15 04:47:47

0

我在創建新的html.erb時遇到了同樣的問題。
即使我的routes.rb 匹配'controller/action'=>'controller#action'是正確的。
後來我發現問題是資源:控制器高於匹配。

這是爲我工作的正確順序:

匹配 '控制器/行動'=> '控制#行動'
資源:控制器

由於帕夫洛因爲他的回答給了我暗示,資源參與了這個問題,並maz錯誤。

相關問題