【问题标题】:form_for error in rails 3rails 3中的form_for错误
【发布时间】:2012-04-02 05:09:33
【问题描述】:

我正在尝试使用 form_for 标记保存名为“客户”的模型。我没有这个模型的控制器,我希望使用另一个“公共”控制器来完成这个任务。所以这是我的看法:

<%= 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”代码错误,我做错了什么?但是如果我为“客户”创建一个控制器或脚手架并尝试使用它,我会被重定向到“客户/显示/:id”路径,我不想要那个。

【问题讨论】:

  • 请发布错误信息。
  • #:0x8b428e8> 的未定义方法 `customers_path'

标签: ruby-on-rails-3


【解决方案1】:

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

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

#your code

<% end %>

【讨论】:

  • 它成功了,我也必须添加一个 post 路由到 save_order,但它可以按我的意愿工作,谢谢
【解决方案2】:

抱歉,您是在寻求帮助,了解如何在做错事情时让事情正常工作。我会尽力解释,希望对您有所帮助。

如果你想保存一个你应该使用的客户模型,猜猜看,一个客户控制器。有些人喜欢使用脚手架,有些人讨厌它们。但是,脚手架代码在保存模型后重定向到 show 方法(很容易更改)这一事实不应该阻止您使用它。脚手架只是为了帮助初学者和/或有办法想出一些快速而肮脏的东西。在这里更改脚手架生成的代码不仅通常是必要的,而且还是一种很好的学习方式。

要保存您应该使用的订单, ::drumroll:: 是一个订单控制器。我什至不知道“公共”控制器会做什么(它本身至少应该告诉你它的名字很糟糕)。

我建议您阅读《使用 Rails 进行敏捷 Web 开发》一书,并通过 depot 应用程序。它很好地涵盖了所有这些主题,您将学到很多东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多