Rails 3.在表单提交时更改重定向

时间:2012-01-04 21:08:11

标签: ruby-on-rails ruby forms

我有这张表,您可以在其中添加税款。

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

因此,如果您点击“保存”,则会保存输入的新项目。我必须在tax_controller.rb

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

然后以表格

<%= 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 %>
...

当我提交表单时,字段会保存在数据库中。问题是它重定向到帐户显示页面;我明白因为form_for(@account)而必须这样做。

所以问题是:如何在提交后指定表单重定向的位置。在这种情况下,我想将其重定向到当前页面。

1 个答案:

答案 0 :(得分:6)

这只是间接因为form_for(@account)

当您发布表单时,它会触及accounts_controller的创建(或更新)操作。

因此,在这个控制器的这2个动作(创建和更新)中,你应该做redirect_to ...

您说要重定向到当前页面。当前页面究竟是什么?


好的,你可以做的是将它添加到你的路线:

resources :accounts, :module => "taxes"

你的表格会变成

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

您的控制器将在app/controllers/taxes/accounts_controller.rb

class Taxes::AccountsController < ::AccountsController
    def edit

    end

    def update
        ...
        redirect_to taxes_url
    end
end

所以你必须用这种方法改变你的形式。您可以将路径([@account]或[:taxes,@ account])作为您的部分参数...

另一个解决方案,可能更简单,就是在表单中输入redirect_to。只有在税收中使用表单时才设置它。在控制器中,unless params[:redirect_to].blank?; redirect_to params[:redirect_to] end ...