3

我对 RoR 还是很陌生,我正在尝试使用 button_to 删除按钮删除一个对象。但是,使用我编写的代码,当我尝试将它带到 /needs/:id 的 destroy 方法时,它会让我到达 /needs.4 而不是 /needs/4。“需求”通过需求控制器和需求 new.html.erb 页面创建,然后显示在用户的显示页面中。从那里,用户应该能够删除他/她的需求。 这是我得到的错误:

ActiveRecord::RecordNotFound in NeedsController#destroy

Couldn't find Need with id=@userneed
Rails.root: /Users/mcn/Dropbox/Code/GA/Projects/GA_projects/p4_final/flatcircle

Application Trace | Framework Trace | Full Trace
app/controllers/needs_controller.rb:20:in `destroy'
Request

Parameters:

{"_method"=>"delete",
 "authenticity_token"=>"Fv6EcMNJQEjtw1naQVMw77lkCGjTJR7ui2FD53aoZfc=",
 "id"=>"@userneed"}

这是我的代码:

需求控制器:

def destroy
    Need.find(params[:id]).destroy
    redirect_to :controller => :users, :action => :show, :id => current_user.id, :flash => { :success => "Your search post was deleted." }
  end

用户的显示页面 button_to 行:

  <%= button_to "delete", '/needs/@userneed', method: :delete, data: { confirm: "You sure?"} %>

并在同一页面上:

@userneed = @current_user.needs.last

路由.rb

delete "/needs/:id", to: "needs#destroy"
get "/needs/:id", to: "needs#show"

超级困惑,如果您知道如何解决,请告诉我!

4

3 回答 3

1

好的,这就是我修复它的方法:

<%= button_to "delete", {:controller => :needs, :action => "destroy", :id => current_user.needs.last.id}, :method => :delete, data: { confirm: "You sure?"} %>

所以我想这是两件事:1)正确位置的花括号(我需要它们,因为在花括号中的内容之后仍然有参数2)以这种方式指定 id 而不是使用 _path() 方式

于 2013-12-24T15:18:34.500 回答
0

尝试<%= button_to "delete", '/needs/<%= @userneed %>', method: :delete, data: { confirm: "You sure?"} %>

@userneed = @current_user.needs.last.id

但我认为最好使用链接而不是按钮......就像<a href="<%=model_path(@model) %>" data-method="delete" data-confirm="are you sure?">delete</a>

于 2013-12-24T13:01:51.627 回答
0

您需要运行rake routes,然后查看您需要的路径。例子...

          schemas GET    /schemas(.:format)                              schemas#index
                  POST   /schemas(.:format)                              schemas#create
       new_schema GET    /schemas/new(.:format)                          schemas#new
      edit_schema GET    /schemas/:id/edit(.:format)                     schemas#edit
           schema GET    /schemas/:id(.:format)                          schemas#show
                  PUT    /schemas/:id(.:format)                          schemas#update
                  DELETE /schemas/:id(.:format)                          schemas#destroy

取左侧的路线名称,所以我需要使用其中一个路线路径助手来完成操作SchemasController...destroy

schemas_path(@schema)

这将在运行时自动替换为(如果对象的 ID 为 1)...

/schemas/1

所以要在按钮中使用它......

<%= button_to "delete", schemas_path(@schema), method: :delete, data: { confirm: "You sure?"} %>

在引用路由时,您应该始终使用路由助手,因为它允许您通过调整routes.rb文件来更改所有路由。如果您需要阅读有关 Rails 路由的更多信息,可以在此处找到该指南...

http://guides.rubyonrails.org/routing.html

于 2013-12-24T13:10:38.670 回答