2012-01-04 10 views
3

税金を追加するテーブルがあります。Rails 3.フォームの提出時にリダイレクトを変更します

|Name | Rate | Description | 
|IVA | 16 | something | 
|  |  |    | 
|  |  |    | 
|  |  |    | 
save 

保存を押すと、入力した新しいアイテムが保存されます。私はその後、このフォーム

<%= form_for(@account) do |f| %> 
<table style="width:400px;" class="taxes"> 
    <tr> 
    <th>Name</th> 
    <th>Rate</th> 
    <th>Description</th> 
    </tr> 

<%= f.fields_for :taxes do |builder| %> 
    <tr> 
    <td><%= builder.text_field :name %></td> 
    <td><%= builder.text_field :rate %> %</td> 
    <td><%= builder.text_field :identification %></td> 
    </tr> 
<% end %> 
... 

で私がフォームを送信すると、フィールドはデータベースに保存されているのですかtaxes_controller.rbに

@account = Account.find(current_user.account_id) 
3.times {@account.taxes.build} 

をこれをしなければなりませんでした。問題は、アカウントの表示ページにリダイレクトされることです。私はそれがform_for(@account)のためにそれをしなければならないことを理解します。

質問があります:フォームを送信後にリダイレクトする場所を指定するにはどうすればよいですか。この場合、私はそれを矯正ページにリダイレクトしたいと思います。

答えて

6

form_for(@account)のため間接的にしか発生しません。

フォームを投稿すると、accounts_controllerの作成(または更新)アクションが発生します。

したがって、このコントローラの2つのアクション(作成および更新)には、redirect_to ...を実行する必要があります。

現在のページにリダイレクトするとします。現在のページは正確に何ですか?


ので、何を行うことができますが、あなたのルートにこれを追加している、[OK]を:

resources :accounts, :module => "taxes" 

そして、あなたのフォームはあなたのコントローラがapp/controllers/taxes/accounts_controller.rb

class Taxes::AccountsController < ::AccountsController 
    def edit 

    end 

    def update 
     ... 
     redirect_to taxes_url 
    end 
end 
になり

form_for [:taxes, @account] ... do |f| 

なります

この方法でフォームを変更する必要があります。

もう一つの解決策は、あなたのフォームにredirect_toを入力することだけです。あなたは、あなたのパスにパス([@account]または[:taxes、@account])を渡すことができます。フォームを税金で使用する場合にのみ設定します。コントローラーでunless params[:redirect_to].blank?; redirect_to params[:redirect_to] end ...

+0

はい、私も新しいアカウントを作成するためにアカウントコントローラーを使用します。上記の形で、私はそれを使って新しい税金を作ります。現在のページはhttp:// localhost:3000/taxesです – leonel

+0

私の投稿を更新しました – Robin

+0

私はaccounts_controllerで 'class Taxes :: AccountsController ' – leonel

関連する問題