小编Tom*_*man的帖子

在Rails中不显眼的jQuery自动完成

我正在使用rails,但是在使用jQuery时不显眼地执行我的所有Javascript application.js.

不幸的是,这使得引用URL非常困难.例如,如果我想提供字段自动完成行为,我必须硬编码自动完成URL,application.js因为rails url_for不可用.

是否有可能application.js使用erb?我是否以错误的方式思考这个问题?

jquery ruby-on-rails unobtrusive-javascript

13
推荐指数
1
解决办法
6051
查看次数

更精确的distance_of_time_in_words

distance_of_time_in_words 很棒,但有时它不够精细.

我需要一个能用语言报告确切时间距离的函数.例如,上午7:50至上午10:10应该是"2小时20分钟"的距离,而不是"约2小时"或任何distance_of_time_in_words可能做的事情.

我的用例是报告列车时刻表,特别是列车乘坐的时间.

time ruby-on-rails

13
推荐指数
1
解决办法
1万
查看次数

为什么使用数据库迁移而不是版本控制的模式

迁移无疑比仅仅启动phpMyAdmin和更改架构更好(就像我在php时期所做的那样),但在使用它们一段时间后,我认为它们存在致命缺陷.

版本控制是一个已解决的问题.迁移的主要功能是保留数据库更改的历史记录.但是为每次更改存储不同的文件是一种笨拙的方式来跟踪它们.如果post.rb要添加新的虚拟属性,则不要创建新版本(或表示增量的文件) - 当您要添加新的非虚拟属性时,为什么要创建新的迁移?

换句话说,就像检查post.rb版本控制一样,为什么不检查schema.rb到版本控制并直接对文件进行更改?

这在功能上与为每个delta保留文件相同,但使用起来要容易得多.我的心理模型是"我希望表X有这样的列(或者我真的希望模型X具有这样的属性)" - 为什么你必须从这里推断如何从现有的模式中获得; 只是打开schema.rb并给表X正确的列!

但即使是类包装表的想法也是一个实现细节!为什么我不能打开post.rb并说:

 Class Post
    t.string :title
    t.text :body
 end
Run Code Online (Sandbox Code Playgroud)

如果你使用这样的模型,你必须决定如何处理现有数据.但即便如此,迁移也是过度的 - 当您迁移数据时,当您使用迁移down方法时,您将失去保真度.

无论如何,我的问题是,即使你想不出一个更好的方法,也不是有点粗略的迁移?

migration orm

12
推荐指数
3
解决办法
2751
查看次数

所有正则表达式都停止了吗?

是否有任何正则表达式,对于某些输入字符串,将永远搜索匹配?

regex halting-problem

12
推荐指数
2
解决办法
1272
查看次数

如何确定控制器操作是否已呈现(而不是重定向?)

如果应用程序已重定向或呈现,则该performed?方法true在控制器中返回.

如何确定应用程序是否呈现(而不是重定向)?

performed?文档来看,我可以看一下@performed_render,但这看起来很糟糕.

编辑:我为什么要这样做?

我试图在它导致渲染(而不是重定向)的情况下缓存控制器动作的输出.这是我现在使用的代码:(基于渲染缓存)

  def render_with_cache(options = {})
    key = ([request.request_uri, request.format] | (options.delete(:key_additions) || [])).join("::")
    body = Rails.cache.read(key)

    if body
      render :text => body
    else
      yield if block_given?
      render unless performed?
      if @performed_render
        Rails.cache.write(key, response.body, options) # :expires_in
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails

12
推荐指数
3
解决办法
7003
查看次数

永远不要渲染布局以响应xhrs

大多数时候,当请求来自AJAX时,我不想呈现布局.为此render :layout => !request.xhr?,我经常在我的控制器动作中写作.

如何将其设为默认值?也就是说,我希望能够写作

def new
  Post.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

并具有功能

def show
  Post.find(params[:id])
  render :layout => !request.xhr?
end
Run Code Online (Sandbox Code Playgroud)

(我很乐意在极少数情况下手动指定布局,我想使用它.)

ajax ruby-on-rails

12
推荐指数
2
解决办法
2119
查看次数

使用jQuery进行AJAX错误处理:我应该使用$ .ajaxSetup()还是$ .fn.ajaxError()

我想在出现AJAX错误时提醒用户.你可以这样做$.ajaxSetup:

$.ajaxSetup({ 
  error: function() {
    alert("OOPS!")
  }
});
Run Code Online (Sandbox Code Playgroud)

但jQuery文档建议不要这样做:

注意:全局回调函数应该使用它们各自的全局Ajax事件处理程序方法设置 - .ajaxStart(),. ajaxStop(),. ajaxComplete(),. ajaxError(),. ajaxSuccess(),. ajaxSend() - 而不是在$ .ajaxSetup()的设置对象.

所以我想我应该这样做:

$("#some_random_div").ajaxError(function() {
  alert("OOPS!")
});
Run Code Online (Sandbox Code Playgroud)

这对我来说没有意义:AJAX错误回调与我的应用程序整体有关,而不是特定的页面元素.那么为什么回调函数应该与单个页面元素相关联?

那么:为什么jQuery文档建议使用看起来不太可读的方法,哪种方法最好?

ajax error-handling jquery

12
推荐指数
1
解决办法
5604
查看次数

使用Nokogiri将元素添加到元素中

显然Nokogiri的add_class方法仅适用于NodeLists,使此代码无效:

doc.search('a').each do |anchor|
  anchor.inner_text = "hello!"
  anchor.add_class("whatever") # WHOOPS!
end
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能使这段代码有效?我觉得它有点像

doc.search('a').each do |anchor|
  anchor.inner_text = "hello!"
  Nokogiri::XML::NodeSet.new(anchor).add_class("whatever")
end
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.请告诉我,我不必add_class为单个节点实现自己的!

ruby nokogiri

12
推荐指数
1
解决办法
5247
查看次数

从Ruby中的哈希数组生成HTML表

什么是从散列数组生成HTML表格的最佳方法(理想情况下是宝石,但必要时还有代码片段)?

例如,这个哈希数组:

[{"col1"=>"v1", "col2"=>"v2"}, {"col1"=>"v3", "col2"=>"v4"}]
Run Code Online (Sandbox Code Playgroud)

应该生成这个表:

<table>
  <tr><th>col1</th><th>col2</th></tr>
  <tr><td>v1</td><td>v2</td></tr>
  <tr><td>v3</td><td>v4</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)

ruby html-table ruby-on-rails

11
推荐指数
2
解决办法
9834
查看次数

来自rake任务的render_to_string

我想使用Rake任务来缓存我的站点地图,以便请求sitemap.xml不会永远.这是我到目前为止所拥有的:

  @posts = Post.all

  sitemap = render_to_string :template => 'sitemap/sitemap', :locals => {:posts => @posts}, :layout => false
  Rails.cache.write('sitemap', sitemap)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时,我收到一个错误:

undefined local variable or method `headers' for #<Object:0x100177298>
Run Code Online (Sandbox Code Playgroud)

如何从Rake中将模板渲染为字符串?

rake ruby-on-rails

10
推荐指数
1
解决办法
6921
查看次数