Rails 4 Controller:为什么每次刷新页面时都会创建一个新对象?

时间:2014-02-15 07:06:03

标签: ruby-on-rails-4

我完全失去了,我尽可能多地研究,找不到答案。以下是代码:

def create
  @budget_source  = BudgetSource.create(budget_source_params)
  @budget_source.update(:user_id => current_user.id)
  @budget_source.budget_segments.order(:id).each do |bs|
     bs.budget_ratios.order(:id).each_with_index do |br, i|
       br.update(scenario_id: i+1)
     end
  end
  render 'show'
end

每次刷新页面时都会创建一个新的BudgetSource。

1 个答案:

答案 0 :(得分:0)

问题在于render 'show'。当您提交表单时,您将保持在同一页面上,因为呈现只是呈现模板。因此,当您刷新页面时,它不是调用show方法,而是实际调用create方法,因为您执行的上一个操作是POST而不是GET。你应该做的是用redirect_to @budget_source之类的东西重新定向到show方法。大多数浏览器通常会警告您是否刷新了会导致POST方法而不是GET的页面。