2013-07-15 4 views
0

Я очень новичок в рельсах, поэтому, пожалуйста, извините меня, если я задаю такой основной вопрос.Rails 3 - вызов метода контроллера с submit_tag

Я имел эту форму на моей странице html.erb:

<%= form_tag(posts_path(:controller => "posts", :action => "create_thread"), :method => "post") do%> 
    Title: 
    <br></br> 
    <%= text_area_tag 'title', 'Thread\'s title is required!', :rows => 1, :cols => 30 %> 
    <br></br> 
    Message: 
    <br></br> 
    <%= text_area_tag 'body', nil, :rows => 15, :cols => 50 %> 
    <br></br> 
    <%= submit_tag "Create Thread" %> 
<% end %> 

Я определил "create_thread" метод в контроллере:

class PostsController < ApplicationController 
    def create_thread 
     logger.info("Thread created: ") 
    end 
end 

В routes.rb файл, я создал маршрут для подавать:

resources :posts do 
collection do 
    post 'index', :as => :create_thread 
end 

в принципе, когда я нажимаю на кнопку «Создать тему» ​​на форме, я хотел бы г ails выполнить функцию «create_thread» в классе PostsController, а затем загрузить страницу «index».

Однако, когда я нажал кнопку «Создать тему», он сразу же попал на страницу «индекс» (так что путь работает, по крайней мере), но он не выполнил функцию «create_thread» в контроллер.

Это было то, что он показал на консоли, когда я нажал на кнопку:

Started POST "/posts?action=create_thread" for 127.0.0.1 at 2013-07-14 22:08:35 -0700 
Processing by PostsController#index as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9XVUrStaysmdOc6ug/A3XXX/8bzLkY8ixCkiAfHs9fU=", "title"=>"Thread's title is required!", "body"=>"", "commit"=>"Create Thread"} 

Вот выход рейк маршрутов

   root  /         posts#index 
    new_thread_posts GET /posts/new_thread(.:format)   posts#new_thread 
create_thread_posts POST /posts(.:format)     posts#index 
current_thread_post GET /posts/:id/current_thread(.:format) posts#current_thread 
       posts GET /posts(.:format)     posts#index 
        POST /posts(.:format)     posts#create 
      new_post GET /posts/new(.:format)    posts#new 
      edit_post GET /posts/:id/edit(.:format)   posts#edit 
       post GET /posts/:id(.:format)    posts#show 
        PUT /posts/:id(.:format)    posts#update 
        DELETE /posts/:id(.:format)    posts#destroy 

Итак, как же я получаю рельсы выполнить команду " create_thread "в PostsController? Я занимаюсь поиском через Интернет за последние 2 дня и пробую всевозможные вещи, но никто не работал на меня.

Подсказка или указатель были бы очень благодарны!

Заранее благодарю вас за помощь.

+0

добавить вывод «рек маршруты» –

+0

вы пытались использовать redirect_to внутри create_thread действий после регистрации? –

+0

@ prasad.surase Я обновил сообщение с выходом рейк-маршрутов. Спасибо – TATN

ответ

0

Попробуйте следующее

resources :posts do 
    post :create_thread, on: :collection 
end 

form_tag(controller: :posts, action: :create_thread) 
+0

Спасибо. Это почти работает! Это дало мне ошибку «не может использовать коллекцию ресурсов (ресурсов)» в route.rb. Ошибка: «post: create_thread, on:: collection». Если я прокомментировал часть «, on: collection», то он выполнил метод create_thread. Но теперь он говорит: «Отсутствие шаблонных сообщений/create_thread». Я не хочу создавать другую страницу «create_thread.html.erb». Я бы хотел, чтобы он просто возвращался на индексную страницу, поэтому в маршрутах я пытался «post: create_thread,« index », но это, похоже, не работало (функция была выполнена, но получила ошибку« отсутствующие сообщения о шаблонах »/create_thread ". – TATN

+0

Bingo! Если я поместил« redirect_to posts_path »внутри метода create_thread (в дополнение к изменению маршрутов.rb и form_tag(), как вы предполагали), то это сработало! Создан метод create_thread, и рельсы взяли меня назад к странице индекса после этого.Однако, мне просто интересно, есть ли это сделать в route.rb, а не внутри метода create_thread. – TATN

+0

Вы должны иметь возможность использовать 'collection' в своем маршруте. //guides.rubyonrails.org/routing.html#adding-more-restful-actions –

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