我无法解释原因,但不知何故,我的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。更奇怪的是,当我发表评论时,我得到了相同的结果!我甚至尝试使用路线,并得到相同的结果。看起来我完全正在跳过这个动作并且直接进入视图。什么可能导致这个错误?
答案 0 :(得分:0)
我怀疑您在控制器中意外地使用了finalize_order
方法私有。如果它是私有方法,则不会调用它,并且视图将直接呈现。这是Rails的一个鲜为人知的特性 - 动作实际上并不存在。
如果该方法是私有的,(private
关键字将在控制器的某处位于其上方),然后将操作移至关键字上方以使其公开。
答案 1 :(得分:0)
与sevenseacat建议的一致,但实际问题是我偶然有两个finalize_order方法。我认为rails无法决定运行哪一个,所以它既不会运行。