2012-04-13 3 views
0

Моя цель - обновлять информацию о разделе сайта на регулярной основе. Я хочу сделать это, используя именованные ресурсы. Моя проблема заключается в том, что форма не будет сохранена в db и перейдет на страницу about, после того как я нажму кнопку «Создать текст».Форма не сохраняется! 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 правильно делает форму с методом = пост? –

+0

Да, я обновлю сообщение, чтобы показать это. – cj3kim

+0

'match '/ about /' => 'static_pages # save_about', через: 'post'' не кажется правильным. Он должен соответствовать '/ about' без косой черты. Если это не работает, изучите порядок ваших маршрутов. Возможно, путь к определенному ранее потребляет почту. –

ответ

3

8 match '/about' => 'static_pages#about' совпадает с тем же маршрутом, что 13 match '/about/' => 'static_pages#save_about', via: 'post'

Поскольку они оба соответствуют /about, а общий - первый, этот будет использоваться. Либо поставьте более конкретный маршрут сначала 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

Смежные вопросы