小编dep*_*uid的帖子

如何使用ack搜索(转义)美元符号?

我想$$在代码库中找到文字字符串:" ",但是像这样转义美元符号:

ack \$\$
Run Code Online (Sandbox Code Playgroud)

不起作用.

regex unix perl ack

5
推荐指数
2
解决办法
3685
查看次数

什么方法会从类方法返回 ActiveRecord 所有者对象?

假设我有拥有项目的用户:

class User < ActiveRecord::Base
  has_many :items
end
Run Code Online (Sandbox Code Playgroud)
class Item < ActiveRecord::Base
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

现在我想向 item 添加一个类方法以创建自定义记录:

def self.create_personalized
  create description: "#{user.name}' item"
end
Run Code Online (Sandbox Code Playgroud)

但是当然,由于这是一个类方法,因此user是未定义的。但是如果我用 using 调用它user.items.create_personalized,那么通过关系有一个关联的用户。我知道这Item.create_personalized是知道用户,因为这有效:

def self.create_personalized
  item = create
  item.update_attribute :description, "#{item.user.name}'s item"
end
Run Code Online (Sandbox Code Playgroud)

但显然这不是访问所有者对象的最佳方式。正确的方法是什么?

activerecord ruby-on-rails

2
推荐指数
1
解决办法
330
查看次数

如何验证和解析带有用户时区的ISO 8601时间戳?

我需要能够接收用户输入的时间戳,带有可选的时区组件,验证它是否是有效的ISO 8601时间表示,并根据用户配置的时区进行解析.

我在Ruby 2.3上使用Rails 4.2.6.我曾希望Time.zone(ActiveSupport::TimeZone)有一个等效的实现,Time::iso8601以便我可以挽救ArgumentError异常以确定用户输入是否是有效的ISO 8601时间表示.然后我可以这样做:

user_time_zone = 'America/Los_Angeles' # Would actually be from user's stored settings
params = {when: '2016-04-01T01:01:01'} # Would actually be from user input

# Would actually use Time::use_zone in around_action filter
Time.use_zone(user_time_zone) do
  timestamp = Time.zone.iso8601 params[:when]
end
Run Code Online (Sandbox Code Playgroud)

但是,唉,不存在这样的方法.我找不到同等的一个.

我不能使用Time.zone.parse,因为它将模糊日期视为有效(例如Time.zone.parse '04/11/16' # => Tue, 16 Nov 0004 00:00:00 LMT -07:52).

到目前为止,我能够提出的最佳选择是:

Time.use_zone(user_time_zone) do
  old_tz = ENV['TZ']
  ENV['TZ'] …
Run Code Online (Sandbox Code Playgroud)

timezone ruby-on-rails iso8601

2
推荐指数
1
解决办法
1713
查看次数

标签 统计

ruby-on-rails ×2

ack ×1

activerecord ×1

iso8601 ×1

perl ×1

regex ×1

timezone ×1

unix ×1