我继承的应用程序具有以下更新用户配置文件的操作:
class UsersController < ApplicationController
  # ...
  def update
    @user = current_user
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated profile."
      redirect_to root_url
    else
      flash[:error] = "Hrm, something went wrong."
      render :action => 'edit'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)
表单PUTS(真的POSTS采用一_method=PUT)该操作有一个password和password_confirmation领域,但没有old_password现场.我通过测试注意到我甚至不需要填写该password_confirmation字段.
第一个问题:使用Authlogic时是否有更成熟的密码更改方式?
第二个问题:是否有关于密码更改的最佳实践(特别是从可用性角度)的文献?它应该是一个单独的表单,而不是与其他用户字段混合使用?
第三个问题:大多数网站都有一个old_password字段,但Authlogic似乎不支持本地.什么是Authlogic-ey方式确认它实际上是用户他/她自己更改密码而不是那些黑客入侵会话的人?
我有一个页面,翻译有多种语言版本.我正在努力成为一名优秀的HTTP公民:
Accept-Language标题返回正确的版本Vary: Accept-Language头(我网站的用户可以在用户个人资料中覆盖这些设置,但我认为这与手头的讨论无关.)
如何让搜索引擎索引所有变种?
后来
在谷歌网站管理员中心博客推荐使用URL和对使用Accept-Language检测语言.他们的解决方案肯定会有效,但似乎反HTTP.
偶尔,软件会出问题.当出现问题时,可能发生的最糟糕的事情之一是系统将某些数据保留在不一致或无效的状态.当然,我们试图减少这些情况,但它们确实发生了.
当它们发生时,我们通常必须采取一些数据清理的形式采取纠正措施.(除了加强允许不一致的代码之外.)我在清理中看到的一些技术包括
rails console来通过代码编辑生产数据与直接访问版本相比,脚本和迁移版本具有以下几个优点:
不幸的是,如果签入,这些脚本也具有明显的安全劣势:它们将PII或其他敏感数据从数据库泄漏到源代码控制中.例如,
# 2013-07-05: delete all of Susan Yee's OAuth tokens because she's locked out
User.find_by_email('susan.yee@example.com').oauth_tokens.delete_all!
Run Code Online (Sandbox Code Playgroud)
我可以想到几种解决这种风险的方法:
有没有人有成熟的技术?
我有一些设置超时的Ember代码:
var MyObject = Ember.Object.extend({
  setFooToBarLater: function() {
    Ember.run.later(this, 'set', 'foo', 'bar', 500);
  }
});
Run Code Online (Sandbox Code Playgroud)
我想用Sinon的假时钟测试一下.这是我试过的:
var clock = sinon.useFakeTimers();
var myObject = MyObject.create();
myObject.setFooToBarLater();
clock.tick(600);
expect(myObject.get('foo')).to.be('bar');
Run Code Online (Sandbox Code Playgroud)
但expect总是在之前运行set.我也尝试clock.tick在运行循环中包装:
Ember.run(clock, 'tick', 600);
Run Code Online (Sandbox Code Playgroud) 您知道在不同浏览器中处理HTML标签/属性有什么不同吗?例如,我曾经看过一个带有输入标签的页面,其maxlength字段设置为"2o".Firefox和Opera忽略"o",并将最大长度设置为2,而Internet Explorer完全忽略该字段.你知道了吗?
(注意:看到这可能是一个列表,如果差异的一般名称是粗体文本,那将是很好的,例如:标记属性中不同的不规则值处理)
您认为在Rails中创建SEO友好URL(动态)的最佳方法是什么?
想象一下,在您的应用程序中有两个RESTful控制器(UsersController,OffersController)和一个PagesController(用于静态内容,如index,about等).
您定义了以下路由:
map.with_options :controller => 'pages' do |pages|
  pages.root :action => 'index'     # static home page
  pages.about :action => 'about'    # static about page
  # maybe more static pages...
end
map.resources :users    # RESTful UsersController
map.resources :posts    # RESTful PostsController
Run Code Online (Sandbox Code Playgroud)
您的应用程序布局如下所示:
<html>
  <head>
    <title>Demo Application</title>
  </head>
  <body>
    <ul id="menu">
       <li>
         <%= link_to 'Home', root_path %>
       </li>
       <li>
         <%= link_to 'Offers', offers_path %>
         <ul id="submenu>
           <li><%= link_to 'Search', 'path/to/search' %></li>
           <li>maybe more links...</li>
         </ul>
       </li>
       <li>
         <%= link_to 'About', about_path %> …Run Code Online (Sandbox Code Playgroud) 运行rake db:migrate后跟rake test:units产生以下内容:
rake test:functionals
(in /projects/my_project)
rake aborted!
SQLite3::SQLException: index unique_schema_migrations already exists: CREATE UNIQUE INDEX "unique_schema_migrations" ON "ts_schema_migrations" ("version")
Run Code Online (Sandbox Code Playgroud)
相关部分db/schema.rb如下:
create_table "ts_schema_migrations", :id => false, :force => true do |t|
  t.string "version", :null => false
end
add_index "ts_schema_migrations", ["version"], :name => "unique_schema_migrations", :unique => true
Run Code Online (Sandbox Code Playgroud)
我不是在任何地方手动更改此索引,而是使用Rails的默认SQLite3适配器和全新的数据库.(也就是说,rm db/*sqlite3之前运行rake db:migrate没有帮助.)
该test:units任务是否可能尝试重新加载架构?如果是这样,为什么?它不应该认识到架构已经是最新的吗?
我的ApplicationController中有一个错误处理方法:
rescue_from ActiveRecord::RecordNotFound, :with => :not_found
def not_found(exception)
  @exception = exception
  render :template => '/errors/not_found', :status => 404
end
Run Code Online (Sandbox Code Playgroud)
在RAILS_ROOT/app/views/errors/not_found.html.erb,我有这个:
<h1>Error 404: Not Found</h1>
<%= debug @exception %>
Run Code Online (Sandbox Code Playgroud)
但@exception总是nil在那里.我试过了debug assigns,但总是这样{}.打电话时不会复制分配render :template吗?如果是这样,我怎么能得到它们?
我在边缘Rails.
我有一节:
\section{Introduction} \label{sec:introduction}
Run Code Online (Sandbox Code Playgroud)
我想要一个链接到链接文本是该部分名称的部分.我可以用hyperref:
The \hyperrf[sec:introduction]{Introduction} introduces the paper.
Run Code Online (Sandbox Code Playgroud)
但这需要重复章节标题("简介").有没有办法抓住它?ref产生节号,这是不对的.  autoref产生"部分",然后产生部分编号,这也是不正确的.