【发布时间】:2014-01-31 20:32:20
【问题描述】:
我最初收到Routing Errors on attempts to delete all records in a table using Rails 4 through a link_to 中发布的路由错误,该问题已得到解决。
现在我遇到了传递“id=remove_all”的问题。我正在使用 Rails 4,并尝试使用 link_to 助手删除所有评估。相关代码如下:
routes.rb
resources :assessments do
collection do
delete :remove_all
end
end
评估 index.html.erb
<p>To delete all assessments in one swoop, click <%= link_to 'Remove ALL Assessments', remove_all_assessments_path, method: :destroy, data: { confirm: 'Are you sure?' } %>
assesments_controller.rb
def remove_all
@assessments = Assessment.all
@assessments.each do |assessment|
assessment.destroy(assessment.id)
end
flash[:notice] = "All assessments have been deleted."
redirect_to assessments_url
end
我运行 rake 路线和
Prefix Verb URI Pattern Controller#Action
remove_all_assessments DELETE /assessments/remove_all(.:format) assessments#remove_all
为链接生成的 HTML 源代码:
<p>To delete all assessments in one swoop, click <a data-confirm="Are you sure?" data-method="destroy" href="/assessments/remove_all" rel="nofollow">Remove ALL Assessments</a>
当我单击“删除所有评估”链接时,我希望在 AssessmentsController 中运行 remove_all 操作,并删除 @assessments 中的所有评估,然后将我重定向到评估 URL。但是,当我点击“删除所有评估”链接时,我被带到了网址:http://localhost:3000/assessments/remove_all
ActiveRecord::RecordNotFound in AssessmentsController#destroy
Couldn't find Assessment with id=remove_all
# Use callbacks to share common setup or constraints between actions.
def set_assessment
@assessment = Assessment.find(params[:id])
end
日志显示:
Started DELETE "/assessments/remove_all" for 127.0.0.1 at 2014-01-31 15:41:41 -0500
Processing by AssessmentsController#destroy as HTML
Parameters: {"authenticity_token"=>"fooBarBaz=", "id"=>"remove_all"}
如何使用 Delete 动词将 @assessments 集合传递给 remove_all 操作?这可能吗?
【问题讨论】:
-
您的路线中还有其他内容吗?
-
您还应该在链接中使用
method: :delete而不是method: :destroy。 -
另外,您可以执行
@assessments.destroy_all,而不是使用每个块迭代所有评估
标签: ruby-on-rails ruby-on-rails-4