错误没有路由与控制器匹配并且操作更正

时间:2013-01-31 00:12:30

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我想做一个简单的提交,理想情况下没有路由,将样本插入数据库,但我遇到了一些麻烦。

这是财务指数:

index.html.erb(财务路径)

<%= form_for(@place,:url => new_place_finance_path,:method => :put) do |f| %>

  <%= f.text_field :place %>
  <%= f.submit %>
<% end %>

如果可能,我不想创建成员,我如何在路线中制作:

resources :finances do
  member do
    put :new_place
  end
end

和我的财务总监:

def index
  @finances = Finance.all
  respond_with @finances
  @place = Place.new
end

和行动new_place:

def new_place
  @place = Place.create(params[:place])
  @place.save
  if @place.save
    redirect_to finances_path,:notice => 'Lugar criado com sucesso.'
  else
    redirect_to finances_path,:notice => 'Falha ao criar lugar.'
  end 
end

我收到了这个错误:

No route matches {:action=>"new_place", :controller=>"finances", :id=>nil}

当我执行rake路线时:

new_place_finance PUT    /finances/:id/new_place(.:format) finances#new_place

2 个答案:

答案 0 :(得分:1)

你在这里有一些不寻常的事情。如果要创建新位置,通常会在路径中执行此操作。如果金融可以有很多地方,那就是这样......

resources :finances do
  resources :places
end

这将创建一个名为new_finance_place(@finance)的方法,它将带您进入新表单。并且它将为/ finances /:finance_id / posts创建另一个URL,它将支持POST - 它将在PostsController中调用create方法。

从新表格中,您可以写下:

<%= form_for [@finance, @place] do |f| %>

答案 1 :(得分:0)

new_place_finance_path需要财务对象才能正确评估。在您粘贴在上面的路线

 new_place_finance PUT    /finances/:id/new_place(.:format) finances#new_place

所以new_place_finance_path(@finance)会将:id替换为@ finance.id(或to_param,如果您在模型中创建了该方法)