Rails:表单标签跳过控制器操作

时间:2015-12-10 07:07:30

标签: ruby-on-rails

我无法解释原因,但不知何故,我的form_tag表单正在跳过我的视图并完全绕过我的控制器操作。

这是我的form_tag:

<%=form_tag url_for(:controller=>"orders", :action=>"finalize_order"), :method=>'post' do%>
<%=hidden_field_tag "cc_id_selection"%>
<%=hidden_field_tag "address_id_selection"%>   
<%=submit_tag "Checkout", :class=>"btn btn-primary"%>
<%end%>

这是我的控制器动作:

def finalize_order
  @selected_user_card_id = UserCard.find(params[:cc_id_selection])
  begin #in case they chose pickup
    @selected_address = Address.find(params[:address_id_selection])
  rescue
    @selected_address = params[:address_id_selection] #we can add options besides pickup if we'd like
  end
end

这是我的控制台中记录的内容(取出了一些IP内容)我试着在控制器中添加一条迹线,但没有看到任何迹象:

Started POST "/finalize_order"  Processing by OrdersController#finalize_order as HTML

我在错误页面的底部看到两个参数已成功发布。然而,当我提交时,我在下一个视图中得到错误,表明在控制器中没有实例化param。更奇怪的是,当我发表评论时,我得到了相同的结果!我甚至尝试使用路线,并得到相同的结果。看起来我完全正在跳过这个动作并且直接进入视图。什么可能导致这个错误?

2 个答案:

答案 0 :(得分:0)

我怀疑您在控制器中意外地使用了finalize_order方法私有。如果它是私有方法,则不会调用它,并且视图将直接呈现。这是Rails的一个鲜为人知的特性 - 动作实际上并不存在。

如果该方法是私有的,(private关键字将在控制器的某处位于其上方),然后将操作移至关键字上方以使其公开。

答案 1 :(得分:0)

与sevenseacat建议的一致,但实际问题是我偶然有两个finalize_order方法。我认为rails无法决定运行哪一个,所以它既不会运行。