2014-06-21 55 views
1

我在控制兩個動作:軌道4 - 的聯繫表格路由的行動

def report 
    @user = User.find_by_slug(params[:slug]) 
    end 
    def reportForm 
    @user = User.find_by_slug(params[:slug]) 

    Thread.new do 
     mail = ... 
    end 
    @message = 'Thanks!' 
    end 

,並在路線:

# User report form 
    get "/user/:slug/report", to: "users#report" 
# Catch report form and action 
    post "/user/:slug/report", to: 'users#reportForm' 

和視圖:

<form method="POST" action="/user/<%= @user.slug %>/reportForm"> 
... 

但問題是,當我發送表單時,不會調用動作reportForm,而不是隻刷新當前的pa與形式ge。

這裏有什麼問題?

謝謝你們。

+0

不知道..但按照慣例你的方法名稱不符合它..在3個地方(路線文件和行動名稱和視圖)更改'reportForm'到'report_form'並讓我知道.. –

+2

也_please_使用Rails的表單助手,而不是手動建立所有路線和HTML:http://guides.rubyonrails.org/form_helpers.html#nested-forms –

+0

@ArupRakshit不幸的是,它沒有幫助...仍然是一樣的。即使我改變'/ usasfdsgasdhshs'上的表單中的動作,它仍然是相同的,應用程序被重定向回到同一頁面。 – user984621

回答

1

表助手

這是錯誤的是你沒有使用Rails所提供form helpers的第一件事情 - 這是一個問題,因爲你會像你收到一個小動作小問題結束:

#config/routes.rb 
resources :users do 
    get :report #-> domain.com/users/:id/report 
    post :reportForm #-> domain.com/users/:id/reportForm 
end 

#view 
<%= form_tag user_reportForm_path(@user) do %> 
    ... 
<% end %> 

路線

你的第二個問題是你的路由

你設置以下的路線做:

get "/user/:slug/report", to: "users#report" 
post "/user/:slug/report", to: 'users#reportForm' 

這意味着你必須將請求發送到domain.com/user/user_slug/report。您的形式發送網址reportForm ...

你應該會看到我上面的路線爲解決這個問題

但更重要的是,你應該nested resources讀了起來:

#config/routes.rb 
resources :users do 
    match :report, action: "reportForm", via: [:get, :post] #-> domain.com/users/:id/report 
end 

S 012

最後,您嘗試在您中使用params[:slug] r控制器

隨着你的應該足智多謀的路線在Rails中使用,你會通過params[:id]大部分時間。這應該不是問題(params[:id]中包含的內容可以是任何內容)。

我會強烈建議在尋找一個叫friendly_id寶石,這使得包括在你的應用程序變得簡單許多slugs

#app/models/user.rb 
Class User < ActiveRecord::Base 
    extend FriendlyId 
    friendly_id :name, use: [:slugged, :finders] 
end 

這將允許您撥打:

#app/controllers/users_controller.rb 
Class UsersController < ApplicationController 
    def reportForm 
     User.find params[:id] #-> will use either `id` or `slug` 
    end 
end