2012-04-13 84 views
0

我的目標是半定期更新網站的關於部分。我想用命名資源來做到這一點。我的問題是表單不會保存到數據庫,並在點擊「創建文本」按鈕後轉到關於頁面。表單不保存! rails

我看過我的路線,控制器和視圖,但我不知道我做錯了什麼。任何幫助表示讚賞。

這裏是控制檯輸出:

Started POST "/about" for 127.0.0.1 at 2012-04-13 17:45:29 -0700 
Processing by StaticPagesController#about as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"kmkSyhhqrHiwtIEMd8R1+EEh1ic7688h7lNFW9FnMUM=", "text"=> {"title"=>"", "text"=>"asdfasd"}, "commit"=>"Create Text"} 
Text Load (0.2ms) SELECT "texts".* FROM "texts" WHERE "texts"."id" = ? LIMIT 1 [["id", 6]] 
Text Load (0.2ms) SELECT "texts".* FROM "texts" WHERE "texts"."id" = ? LIMIT 1 [["id", 7]] 
Text Load (0.1ms) SELECT "texts".* FROM "texts" WHERE "texts"."id" = ? LIMIT 1 [["id", 8]] 
Rendered static_pages/about.html.erb within layouts/application (0.7ms) 
Rendered shared/_header.html.erb (1.5ms) 
Rendered shared/_footer.html.erb (1.1ms) 
Completed 200 OK in 30ms (Views: 15.5ms | ActiveRecord: 1.1ms) 

這裏是about.html.erb視圖:

1 <div id="container_about"> 
2 <%= image_tag "chocolate_lady.jpg", id: "about_image" %> 
3 <div id="right_column_about" > 
4  <h1> Who we are </h1> 
5  <%= @text1.text %> 
6  <br /> 
7  <br /> 
8  <%= @text2.text %> 
9  <br /> 
10  <br /> 
11  <%= @text3.text %> 
12 </div> 
13 </div> 

這裏是表格視圖:

4 <%= flash[:notice] %> 
5 <%= flash[:status] %> 
6 
7 <%= form_for @about, :url => { :action => 'save_about'} do |f| %> 
8 
9 <div class="field"> 
10  <%= f.label :title %><br /> 
11  <%= f.text_field :title %> 
12 </div> 
13 <div class="field"> 
14  <%= f.label :text %><br /> 
15  <%= f.text_area :text %> 
16 </div> 
17 
18 <div class="actions"> 
19  <%= f.submit %> 
20 </div> 
21 <% end %> 
22 

形式的html :

<form accept-charset="UTF-8" action="/about" class="new_text" id="new_text" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="kmkSyhhqrHiwtIEMd8R1+EEh1ic7688h7lNFW9FnMUM="></div> 

<div class="field"> 
<label for="text_title">Title</label><br> 
<input id="text_title" name="text[title]" size="30" type="text"> 
</div> 
<div class="field"> 
<label for="text_text">Text</label><br> 
<textarea cols="40" id="text_text" name="text[text]" rows="20"></textarea> 
</div> 

<div class="actions"> 
<input name="commit" type="submit" value="Create Text"> 
</div> 
</form> 

這裏是我的耙路線:

product_photos GET /product_photos(.:format)   product_photos#index 
       POST /product_photos(.:format)   product_photos#create 
new_product_photo GET /product_photos/new(.:format)  product_photos#new 
edit_product_photo GET /product_photos/:id/edit(.:format) product_photos#edit 
product_photo GET /product_photos/:id(.:format)  product_photos#show 
       PUT /product_photos/:id(.:format)  product_photos#update 
       DELETE /product_photos/:id(.:format)  product_photos#destroy 
      root  /        static_pages#home 
     products  /products(.:format)    ProductPhotos#index 
     about  /about(.:format)     static_pages#about 
     contact  /contact(.:format)     static_pages#contact 
     policy  /policy(.:format)     static_pages#policy 
     new_text  /about/new(.:format)    static_pages#new_about 
    show_text  /about/:id(.:format)    static_pages#show_about 
       POST /about(.:format)     static_pages#save_about 

這裏是我的路線:

7 match '/products' => 'ProductPhotos#index' 
8 match '/about' => 'static_pages#about' 
9 match '/contact' => 'static_pages#contact' 
10 match '/policy' => 'static_pages#policy' 
11 match '/about/new/' => 'static_pages#new_about', :as => :new_text 
12 match '/about/:id' => 'static_pages#show_about', :as => :show_text 
13 match '/about/' => 'static_pages#save_about', via: 'post' 

這裏是我的控制器:

12 def show_about 
13  @about = Text.find(params[:id]) 
14 
15  respond_to do |format| 
16  format.html 
17  format.json { render json: @about } 
18  end 
19 end 
20 
21 def new_about 
22  @about = Text.new 
23  respond_to do |format| 
24  format.html # new_about.html.erb 
25  format.json { render json: @about } 
26  end 
27 end 
28 
29 def save_about 
30  @about = Text.new(params[:text]) 
31  
32  respond_to do |format| 
33  if @about.save 
34   format.html { redirect_to show_about_path(@about), notice: 'Product photo was successfully created.' } 
35   format.json { render json: @about, status: :created, location: @about } 
36  else 
37   format.html { redirect_to action: 'new_about', notice: 'Product photo wasn\'t save'} 
38   format.json { render json: @about.errors, status: :unprocessable_entity } 
39  end 
40  end 
41 end 
42 
+0

每一個路徑是你的HTML渲染正確使用方法=郵寄的形式? – 2012-04-13 22:45:20

+0

是的,我會更新帖子以表明這一點。 – cj3kim 2012-04-14 00:22:44

+0

'match'/ about /'=>'static_pages#save_about',via:'post'' does not seem。它應該匹配沒有結尾斜槓的'/ about'。如果這不起作用,請查看路線的順序。也許前面定義的路徑正在消耗該帖子。 – 2012-04-14 00:49:45

回答

3

8 match '/about' => 'static_pages#about'作爲13 match '/about/' => 'static_pages#save_about', via: 'post'

相同路由匹配

因爲他們兩者匹配​​和通用的第一個,這一個將被使用。或者將更具體的路線首先放在match '/about/' => 'static_pages#save_about', via: 'post'之後,然後更改通用路線,以便讓它聽:get,如match '/about' => 'static_pages#about', via: :get。通過特別添加:get它永遠不會消耗:post

基本上當你運行rake routes你想看到一個HTTP方法對於像

 
    users GET /users(.:format)   users#index 
      POST /users(.:format)   users#create 
new_user GET /users/new(.:format)  users#new 
edit_user GET /users/:id/edit(.:format) users#edit 
+0

我花了一天的時間。可能已經一週了!謝謝! – cj3kim 2012-04-14 17:15:15