我正在尝试使用form_for标记保存名为“customer”的模型。我没有这个模型的控制器,我希望使用另一个控制器'public'来执行此任务。所以这是我的观点:
<%= form_for @customer do |f| %>
<div class="field">
<%= f.label :name %><br/>
<%= f.text_field :name %>
</div>
.... and then
<%= f.submit 'Order', :action => :save_order %><br/>
这是我的控制器
def check_out
@customer = Customer.new
end
def save_order
@customer = Customer.new(params[:customer])
credit_card_no = @customer.credit_card
@order = Order.new
@order.line_items << @cart.items
@customer.orders << @order
if @customer.save
# process credit card
@cart = nil
redirect_to(:action => :show_bill, :id => @order.id)
else
flash[:notice] = 'Could not process your credit card information'
render(:action => :check_out)
end
end
视图是从动作'check_out'加载的,它应该转到动作'save_order'但我在查看'form_for'代码时出错,我做错了什么?但是,如果我为'客户'创建一个控制器或脚手架并尝试使用它,我会被重定向到'customer / show /:id'路径,我不想要那个。
答案 0 :(得分:1)
对不起,但是你正在寻求帮助,让他们在做错的时候做些工作。我会尝试解释,希望这会对你有帮助。
如果您想保存客户模型,您应该使用,猜猜客户控制器。有些人喜欢使用脚手架,有些人讨厌他们。但是,在保存模型后,脚手架代码重定向到show方法这一事实很容易改变,这不应该阻止你使用它。脚手架就是为了帮助初学者和/或有办法想出快速而肮脏的东西。在这里更改脚手架生成的代码不仅通常是必要的,这是一种很好的学习方法。
要保存订单,您应该使用:: drumroll ::,一个订单控制器。我甚至不知道“公共”控制器会做什么(它本身应该至少告诉你它的命名很差)。
我建议您使用Rails手册获取Agile Web Development并通过软件仓库应用程序。它涵盖了所有这些非常好的主题,你将学到很多东西。
答案 1 :(得分:1)
如果你想使用form_for使用不同的控制器,你需要使用:form_for中的url选项。
<%= form_for @customer, :url => { :controller => "your controller name",
:action => "save_order" } do |f| %>
#your code
<% end %>