rails_for中的form_for错误3

时间:2012-04-02 05:09:33

标签: ruby-on-rails-3

我正在尝试使用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'路径,我不想要那个。

2 个答案:

答案 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 %>