2012-04-02 88 views
0

我正在嘗試使用form_for標記保存名爲'customer'的模型。我沒有這個模型的控制器,我希望使用另一個控制器「公共」來完成這個任務。因此,這裏是我的觀點:form_for rails 3中的錯誤

<%= 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

什麼是錯誤? – Rahul 2012-04-02 05:20:16

+0

請發佈錯誤信息。 – 2012-04-02 05:32:40

+0

未定義的方法'customers_path'爲#<#:0x8b428e8> – 2012-04-02 05:35:02

回答

1

如果你想在form_for中使用不同的控制器,你需要在form_for中使用:url選項。

<%= form_for @customer, :url => { :controller => "your controller name", 
:action => "save_order" } do |f| %> 

#your code 

<% end %> 
+0

它的工作,我不得不添加一個郵件路由到save_order以及,但它工作,因爲我想,謝謝 – 2012-04-02 07:18:14

+0

乾杯!乾杯!乾杯! – 2012-04-02 07:22:37

1

對不起,但您在尋求幫助的時候,如何在做錯事的時候做些事情。我會盡力解釋,我希望這會幫助你。

如果您想保存您應該使用的客戶模型,請猜測客戶控制器。有些人喜歡用腳手架,有些人討厭他們。但是,在保存模型後腳手架代碼重定向到show方法這一事實很容易改變,但不應阻止您使用它。腳手架只是幫助初學者和/或有辦法想出一些快速而骯髒的事情。改變腳手架生成的代碼不僅通常是必要的,而且是學習的好方法。

要保存訂單,您應該使用:: drumroll ::,訂單控制器。我甚至不知道「公共」控制器會做什麼(它本身至少應該告訴你它的名字很差)。

我建議你使用Rails的書進行敏捷Web開發,並通過軟件倉庫應用程序。它涵蓋了所有這個主題,你會學到很多東西。