您可能熟悉以下Ruby简写(a是一个数组):
a.map(&:method)
Run Code Online (Sandbox Code Playgroud)
例如,在irb中尝试以下操作:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
Run Code Online (Sandbox Code Playgroud)
语法a.map(&:class)是一种简写a.map {|x| x.class}.
阅读" Ruby中的map(&:name)是什么意思? "中有关此语法的更多信息.
通过语法&:class,您class将为每个数组元素进行方法调用.
我的问题是:你能为方法调用提供参数吗?如果是这样,怎么样?
例如,如何转换以下语法
a = [1,3,5,7,9]
a.map {|x| x + 2}
Run Code Online (Sandbox Code Playgroud)
在&:语法?
我并不是说&:语法更好.我只是对使用&:带参数的语法的机制感兴趣.
我假设你知道这+是Integer类的一个方法.您可以在irb中尝试以下操作:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2
Run Code Online (Sandbox Code Playgroud) 根据Rails doc:http://guides.rubyonrails.org/migrations.html
"Active Record跟踪哪些迁移已经运行,因此您只需更新源并运行rake db:migrate."
ActiveRecord如何实际执行此操作?Active Record在哪里存储数据?
我怀疑这可能存储在数据库本身?在某个地方的桌子上.
在我的开发机器上,我运行了所有迁移.然后我使用mysqldump复制了生产数据库.然后我运行了"rake db:migrate:status",它正确显示了需要在生产数据库上运行的迁移.
我以前认为ActiveRecord使用时间戳跟踪上次迁移运行.但我认为这不正确,因为ActiveRecord正确运行从另一个代码分支合并的"较旧"迁移.
有内心知识的人可以详细说明吗?谢谢
我有一个简单的查询需求:查找自2013年1月1日起订购的用户列表.
在SQL中,这是一个非常简单的查询.
但我正在使用Rails和Active Record.
所以我写道: User.joins(:orders).where("orders.created_at >= '2013-01-01 00:00:00'")
在我们的数据库中,我们自2013年1月1日起有75个用户发出了100个订单.(显然有些用户发了多个订单.)
但是,上面的表达式返回100个用户.(必须有重复.)
我试过了 User.joins(:orders).where("orders.created_at >= '2013-01-01 00:00:00'").uniq
这也行不通.
如何获得自2013年1月1日起订购的75位用户?
某些命令生成彩色文本以提高可读性.
我正在使用Linux.例如,当我使用rak或hg diff
输出为彩色时,为了更好的可读性.
但是,当我通过管道输出 less
hg diff | less
Run Code Online (Sandbox Code Playgroud)
颜色丢失了.
我该如何保留颜色?
谢谢!
正如我们从这篇文章中所知,在Rails中,您可以通过调用获取前一个URL
request.referrer
Run Code Online (Sandbox Code Playgroud)
但是,如何检查前一个URL是否与Rails应用程序中的其余路径匹配?
通过宁静的路径,我指的是Rails提供的路径,例如,
books_path
book_path(book)
edit_book_path(book)
Run Code Online (Sandbox Code Playgroud)
当然我可以在request.referrer上做一个正则表达式字符串匹配,但我觉得它有点难看.
在我的应用程序中,一个特殊情况是request.referrer可以是"localhost:3000/books?page = 4"
我想要它匹配
books_path
Run Code Online (Sandbox Code Playgroud)
返回"/ books"
在这种情况下,如何在不进行正则表达式字符串匹配的情况下检查是否存在匹配?(如果这是可能的话)
谢谢
PS我试过正则表达式字符串匹配,它的工作原理.我只是觉得在Rails中可能有更好的方法.
我正在使用Rails i18n本地化我的网站.
在翻译yml文件中,我看到了
time:
am: am
formats:
default: ! '%a, %d %b %Y %H:%M:%S %z'
long: ! '%d %B, %Y %H:%M'
short: ! '%d %b %H:%M'
pm: pm
Run Code Online (Sandbox Code Playgroud)
(取自https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en-GB.yml)
感叹号是什么意思?如果你带走感叹号,它会有什么不同?
谢谢
我们在Rails中使用ActiveRecord的"序列化"功能,如下所示:
class User < ActiveRecord::Base
serialize :favorite_colors, Array
....
end
Run Code Online (Sandbox Code Playgroud)
所以我们可以拥有
u = User.last
u.favorite_colors = [ 'blue', 'red', 'grey' ]
u.save!
Run Code Online (Sandbox Code Playgroud)
因此,基本上ActiveRecord将上面的数组序列化并将其存储在一个名为favorite_colors的数据库字段中.
我的问题是:如何让用户在表单中输入他喜欢的颜色?你使用一系列文本字段吗?一旦他们进入,你如何在表格中显示他们编辑?
这是与序列化数组属性的Rails表单助手相关的问题.
谢谢
我们正在使用Ruby 1.9.3,我发现Time#to_date似乎是一个奇怪的Ruby错误
Time.new(1).to_date 应于0001年1月3日返回,此时应返回0001年1月1日.
我偶然发现了这个问题.好像我打电话.to_datetime.to_date,结果是正确的.
我还发现了一些其他相关的怪异.请参阅下面的irb控制台输出.(注意我使用的是irb,而不是rails控制台,以确保它只是我使用的Ruby,而不是任何Rails的附加功能.)
>> require "Time"
=> true
>> Time.new(1).to_date
=> #<Date: 0001-01-03 ((1721426j,0s,0n),+0s,2299161j)>
>> Time.new(1).to_datetime
=> #<DateTime: 0001-01-01T00:00:00+01:00 ((1721423j,82800s,0n),+3600s,2299161j)>
>> Time.new(1).to_datetime.to_date
=> #<Date: 0001-01-01 ((1721424j,0s,0n),+0s,2299161j)>
>> Time.new(100).to_date
=> #<Date: 0100-01-03 ((1757585j,0s,0n),+0s,2299161j)>
>> Time.new(1969).to_date
=> #<Date: 1969-01-01 ((2440223j,0s,0n),+0s,2299161j)>
>> Time.new(500).to_date
=> #<Date: 0499-12-31 ((1903682j,0s,0n),+0s,2299161j)>
>> Time.new(1000).to_date
=> #<Date: 0999-12-27 ((2086303j,0s,0n),+0s,2299161j)>
>> Time.new(2014).to_date
=> #<Date: 2014-01-01 ((2456659j,0s,0n),+0s,2299161j)>
>> Time.new(1,1,1,10,0,0, "+00:00").to_date
=> #<Date: 0001-01-03 ((1721426j,0s,0n),+0s,2299161j)>
>> DateTime.new(1,1,1,10,0,0, "+00:00").to_date
=> #<Date: 0001-01-01 ((1721424j,0s,0n),+0s,2299161j)>
Run Code Online (Sandbox Code Playgroud)
有人能解释为什么会这样吗?这与Unix时间有什么关系吗?
似乎DateTime更可靠,至少使用Ruby 1.9.3.
我们有一个网站允许您重置密码(比如忘记密码).这是许多网站的标准.基本上,您输入您在我们网站上注册的电子邮件地址,然后我们会向您发送一封包含电子邮件重置链接的电子邮件.
这都是标准的东西.但问题是:Gmail不知何故认为我们发送给用户的这封电子邮件是垃圾邮件,并将其放入垃圾邮件文件夹中.
Gmail显示的具体邮件是:
Be careful with this message. Our systems couldn't verify that this message
was really sent by xyz.com. You might want to avoid clicking links or replying
with personal information.
Run Code Online (Sandbox Code Playgroud)
让我解释一下我们如何发送电子邮件.我们使用sendgrid.com公司发送电子邮件.xyz.com是我们控制的域名.(xyz在这里是伪名.)来自地址的电子邮件是:do-not-reply@xyz.com
我们已将xyz.com的SPF记录更改为包含"sendgrid.com"(和"sendgrid.net""sendgrid.me").
但是,没有与xyz.com相关的网站.
我的问题是:我们还能做些什么来让Gmail相信该电子邮件来自域名xyz.com?那么它不会将电子邮件放入垃圾邮件文件夹中?
谢谢.
在Sublime Text编辑器中,您可以键入COMMAND + P以根据文件名搜索其他文件(模糊匹配可以大大加快此过程).
例如,如果您在一个源文件中看到以下代码(Ruby中的示例):
u = User.new
u.send_email
Run Code Online (Sandbox Code Playgroud)
如果要查看User类的定义,可以键入COMMAND + P并输入"User"以查看可以打开查看的候选文件列表(其名称包含"user").
是否可以在不输入"User"的情况下跳转到User类的源代码?
当您在源代码中导航时,您的光标处于打开状态,User.new或者u.send_email如果您可以使用某些键绑定跳转到包含User类或send_email方法定义的文件,则速度会快得多.
Sublime Text或其任何精彩插件是否支持此功能?
谢谢.
activerecord ×2
ruby ×2
dns ×1
email ×1
forms ×1
gmail ×1
ide ×1
linux ×1
spf ×1
sublimetext2 ×1
sublimetext3 ×1
sysadmin ×1