我正在使用rails,但是在使用jQuery时不显眼地执行我的所有Javascript application.js.
不幸的是,这使得引用URL非常困难.例如,如果我想提供字段自动完成行为,我必须硬编码自动完成URL,application.js因为rails url_for不可用.
是否有可能application.js使用erb?我是否以错误的方式思考这个问题?
distance_of_time_in_words 很棒,但有时它不够精细.
我需要一个能用语言报告确切时间距离的函数.例如,上午7:50至上午10:10应该是"2小时20分钟"的距离,而不是"约2小时"或任何distance_of_time_in_words可能做的事情.
我的用例是报告列车时刻表,特别是列车乘坐的时间.
迁移无疑比仅仅启动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方法时,您将失去保真度.
无论如何,我的问题是,即使你想不出一个更好的方法,也不是有点粗略的迁移?
如果应用程序已重定向或呈现,则该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) 大多数时候,当请求来自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错误时提醒用户.你可以这样做$.ajaxSetup:
$.ajaxSetup({
error: function() {
alert("OOPS!")
}
});
Run Code Online (Sandbox Code Playgroud)
注意:全局回调函数应该使用它们各自的全局Ajax事件处理程序方法设置 - .ajaxStart(),. ajaxStop(),. ajaxComplete(),. ajaxError(),. ajaxSuccess(),. ajaxSend() - 而不是在$ .ajaxSetup()的设置对象.
所以我想我应该这样做:
$("#some_random_div").ajaxError(function() {
alert("OOPS!")
});
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义:AJAX错误回调与我的应用程序整体有关,而不是特定的页面元素.那么为什么回调函数应该与单个页面元素相关联?
那么:为什么jQuery文档建议使用看起来不太可读的方法,哪种方法最好?
显然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为单个节点实现自己的!
什么是从散列数组生成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) 我想使用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中将模板渲染为字符串?