Rails 3 - 使用submit_tag调用控制器方法

时间:2013-07-15 05:27:42

标签: ruby-on-rails-3

我对rails非常陌生,所以如果我问这样一个基本问题,请原谅。

我在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 %>

我定义了&#34; create_thread&#34;控制器中的方法:

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

在routes.rb文件中,我为submit提交了一个路由:

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

基本上,当我点击&#34;创建线程&#34;表单上的按钮,我想rails用来执行函数&#34; create_thread&#34;在PostsController类中,然后加载&#34;索引&#34;页。

然而,当我点击&#34;创建线程&#34;按钮,它直接带我到&#34;索引&#34;页面(所以路径至少有效),但它没有执行&#34; create_thread&#34;控制器中的功能。

这是我点击按钮时在控制台上显示的内容:

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

那么,我如何让rails执行&#34; create_thread&#34; PostsController中的函数?在过去的两天里,我一直在网上搜索,并尝试各种各样的东西,但没有一个对我有用。

任何提示或指针都会非常感激!

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试以下

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

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