我想做一个简单的提交,理想情况下没有路由,将样本插入数据库,但我遇到了一些麻烦。
这是财务指数:
<%= 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
答案 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
,如果您在模型中创建了该方法)