2012-04-27 1 views
0

UserモデルとAccountコントローラがあります。ユーザーが/account URLにアクセスすると、ユーザー名を含むテキストフィールドとフォームを送信するボタンを含むフォームが表示されます。GETまたはPOSTに基づいてフォームを表示するか処理するかを検出する

私のルートにはmatch '/account' => 'account#index'があります。

私はこの方法が定義されている私のコントローラで

def index 
    @user = User.find(session[:user_id]) 
end 

(ユーザ認証をチェックするbefore_filterに起こる)

これでフォームが正しく表示され、さえ正しく入力されます。しかし、私はフォームが提出されたかどうかを知る方法を知る必要があります。レールの仕組みは何ですか? POSTリクエストが/accountになるのを監視する別ルートがありますか?または、indexメソッドでリクエストタイプを検出しますか?フォームが提出されたかどうかはいつどの時点で決定されますか?

答えて

1

フォームがインデックスコントローラ内で送信されたかどうかを検出できます。私は、paramsハッシュがkey:メソッドをリクエストに使用するメソッドを取得すると信じています。

別の方法は、経路をやり直すことです。

get '/account' => 'account#index' 
post '/account' => 'account#post_action' 

をしてから、コントローラ内部で、あなたが行うことができます::代わりにmatch '/account' => 'account#index'のあなたが行うことができます

def index 
    @user = User.find session[user_id] 
end 

def post_action 
    @user = User.find session[user_id] 
    if @user.update_attributes params[:user] 
    flash[:notice] = 'Update Successful' 
    render :action => index 
    else 
    flash[:notice] = 'Update Unsuccessful' 
    render :action => index 
    end 
end 
関連する問題