Rails里一般我们这样Destroy:
<%= link_to "Destroy", project_path(project), :confirm => "Are you sure?", :method => :delete %>
但是当客户端浏览器禁止JavaScript时就呆了,没有confirm,直接给删除了
所以如果我们需要考虑这种情况的话,需要给出“可降级”的方案,例如跳转到另一个页面,页面上提示是删除or取消
最终是这样来用:
<!-- projects/index.rhtml -->
<ul>
<% for project in @projects %>
<li>
<%=h project.name %>
<%= link_to_destroy "Destroy", project_path(project), confirm_destroy_project_path(project) %>
</li>
<% end %>
</ul>
link_to_destroy是自定义的一个helper,第一个参数为link名,第二个参数为允许JavaScript时的link,第三个参数为禁止JavaScript时的link
# projects_helper.rb
def link_to_destroy(name, url, fallback_url)
link_to_function name, "confirm_destroy(this, '#{url}')", :href => fallback_url
end
实际上link_to_destroy调用了link_to_function,其所调用的JavaScript方法为confirm_destroy:
/* application.js */
function confirm_destroy(element, action) {
if (confirm("Are you sure?")) {
var f = document.createElement('form');
f.style.display = 'none';
element.parentNode.appendChild(f);
f.method = 'POST';
f.action = action;
var m = document.createElement('input');
m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method');
m.setAttribute('value', 'delete');
f.appendChild(m);
f.submit();
}
return false;
}
confirm_destroy方法很眼熟吧?对,就是通常我们写Destroy链接时Rails所生成的JavaScript
这里我们的fallback_url为confirm_destroy_project_path:
# routes.rb
map.resources :projects, :member => { :confirm_destroy => :get }
# projects_controller.rb
def confirm_destroy
@project = Project.find(params[:id])
end
<!-- projects/confirm_destroy.rhtml -->
<% form_for :project, :url => project_path(@project), :html => { :method => :delete } do |f| %>
<h2>Are you sure you want to destroy this project?</h2>
<p>
<%= submit_tag "Destroy" %>
or <%= link_to "cancel", projects_path %>
</p>
<% end %>
很完美的方案!
但是看看这个episode的comment也很搞笑:
引用
HappyCoder Oct 29, 2007 at 02:23
If a user doesn't have js enabled, then f*ck him.
分享到:
相关推荐
Rails::API 是 Rails 的精简版本,针对不需要使用完整 Rails 功能的开发者。 Rails::API 移除了 ActionView 和其他一些渲染功能,不关心Web前端的开发者可更容易、快速地开发应用程序,因此运行速度比正常的 Rails ...
Ruby on Rails:Rails与JavaScript集成.docx
resources :users, only: [:index, :show, :create, :update, :destroy] end ``` 3. **实现控制器**:针对每个路由编写相应的控制器方法,如`index`用于获取所有用户列表、`show`用于显示单个用户的详情等。 4. *...
在Ruby on Rails(Rails)框架中,开发人员经常需要实现各种用户交互功能,例如三级联动选择,这在处理如中国省市区这样的地理数据时尤其常见。这篇博客文章“Rails中应用Ext.tree:以中国的省市地区三级联动选择为...
webpack-rails, 将 web pack与你的Ruby on Rails 应用程序集成 不再维护webpack-rails 不再被维护。 有关详细信息,请参阅 #90. web pack-railsweb pack 为你提供了将 web pack集成到现有的Ruby on Rails 应用程序中...
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
WebCalendar.js是一个轻量级的JavaScript库,用于创建交互式的日期选择器,它可以方便地与Rails框架结合,帮助开发者构建出用户友好的日期输入界面。 首先,我们需要理解Rails与JavaScript的交互方式。在Rails中,...
Ruby on Rails,简称Rails,是一种基于Ruby语言的开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本篇将通过一个入门实例,深入探讨Rails的基本概念和核心...
Mike 的 Rails + React 样板 这有什么: - rails 4 - react 0.12 - react router 0.12 - bootstap - webpack with some loaders (see webpack.config) - a few nice node packages and gems (gemfile and package....
允许您使用为Rails应用程序的前端供电。 是将前端工具像Ruby一样进行编程,纯属喜悦! :smiling_face_with_heart-eyes: 或在运行的检查。 产品特点 :high_voltage: :light_bulb: 即时服务器启动 :high_voltage: ...
Fusioncharts Rails Rails包装器可使用FusionCharts构建图表。 安装(RubyGems) 将此行添加到您的应用程序的Gemfile中: gem 'fusioncharts-rails' 然后执行: $ bundle 或将其自己安装为: $ gem install...
Rails-API-React-Tutorial :laptop: 嘿! 这是一个非常容易遵循的Rails / React API教程,从头到尾全面深入。 本指南向您展示如何通过create-react-app将Ruby on Rails 5 API与React JS一起安装以及如何连接前端和...
:rocket: 轨道助推器 ... rails new blog --skip-javascript --skip-webpacker -d postgresql -m https://raw.githubusercontent.com/bilalbudhani/railsbooster/master/template.rb 执照 RailsBooster 在 MIT
Rails 4.0.0是Ruby on Rails框架的一个重要版本,它在2013年发布,带来了许多改进和新特性,旨在提升开发效率和应用性能。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用程序框架,遵循MVC(模型-视图-...
### Rails 101S: 初学者必备的Ruby on Rails 宝典 #### Introduction: 深入了解Ruby on Rails 《Rails 101S》是一本为Ruby on Rails初学者准备的手册,旨在帮助新手快速入门并掌握基本的开发技能。本手册将从最...
Rails3 是 Ruby on Rails ...熟练掌握这些命令,将极大地提高你的开发效率,使你在构建Ruby on Rails应用时更加得心应手。记住,实践是学习的最佳途径,尝试在实际项目中运用这些命令,你将更加熟悉Rails的工作流程。
- Rails Console:交互式的命令行环境,用于调试和测试代码。 - Rails Server:启动本地开发服务器。 7. **Rails最佳实践**: - RESTful设计:遵循HTTP动词(GET, POST, PUT, DELETE)来设计API。 - Convention...
Rails :: Bootstrap :: Toggle :: Buttons 这款宝石旨在提供捆绑在简单宝石中的靴子。 安装 将此行添加到您的应用程序的Gemfile中: gem 'rails-bootstrap-toggle-buttons' 然后执行: $ bundle 或将其自己安装...