好吧,所以我一直在我的小Rails应用程序中重构我的代码以努力消除重复,并且通常使我的生活更轻松(因为我喜欢轻松的生活).这个重构的一部分,就是将我的两个模型共同的代码移动到一个模块,我可以在需要的地方包含它.
到现在为止还挺好.看起来它会成功,但我遇到了一个我不确定如何解决的问题.该模块(我称之为可发送模块)将成为处理传真,电子邮件或打印文档PDF的代码.因此,例如,我有一个采购订单,我有内部销售订单(富有想象力地缩写为ISO).
我遇到的问题是,我想要在加载对象后初始化一些变量(初始化为没有正确拼写的人:P),所以我一直在使用after_initialize钩子.没问题......直到我开始添加更多mixins.
我遇到的问题是,我可以after_initialize在任何一个mixin中有一个,所以我需要在开始时包含一个超级调用,以确保after_initialize调用其他mixin 调用.哪个好,直到我最终调用超级,我得到一个错误,因为没有超级调用.
这是一个小例子,如果我不够混淆:
class Iso < ActiveRecord::Base
include Shared::TracksSerialNumberExtension
include Shared::OrderLines
extend Shared::Filtered
include Sendable::Model
validates_presence_of :customer
validates_associated :lines
owned_by :customer
order_lines :despatched # Mixin
tracks_serial_numbers :items # Mixin
sendable :customer # Mixin
attr_accessor :address
def initialize( params = nil )
super
self.created_at ||= Time.now.to_date
end
end
Run Code Online (Sandbox Code Playgroud)
因此,如果每个mixin都有一个after_initialize调用,并且有一个超级调用,我该如何阻止最后一个超级调用引发错误?在调用super方法之前,如何测试super方法?
这是我到目前为止:
myArray.map!{ rand(max) }
Run Code Online (Sandbox Code Playgroud)
然而,显然,有时候列表中的数字并不是唯一的.如何确保我的列表只包含唯一的数字,而不必创建一个更大的列表,然后我从中选择n个唯一的数字?
编辑:
我真的很想看到这个完成w/o循环 - 如果可能的话.
我[12,16,5,9,11,5,4]打印了以下数组:12,16,5,9,11,5,4.
我想要它打印: 4,5,11,9,5,16,12
当我array.reverse打印时:
4,5,11,9,5,61,21
Run Code Online (Sandbox Code Playgroud)
它颠倒了个人数字 - 任何想法我怎么能阻止它?
当我在postgresql上的Rails应用程序中运行我的迁移时,我得到了以下通知
NOTICE: CREATE TABLE will create implicit sequence "notification_settings_id_seq" for serial column "notification_settings.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "notification_settings_pkey" for table "notification_settings"
Run Code Online (Sandbox Code Playgroud)
我的迁移文件包含088_create_notification_settings.rb
class CreateNotificationSettings < ActiveRecord::Migration
def self.up
create_table :notification_settings do |t|
t.integer :user_id
t.integer :notification_id
t.boolean :notification_on
t.boolean :outbound
end
end
def self.down
drop_table :notification_settings
end
end
Run Code Online (Sandbox Code Playgroud)
我想知道
这个通知意味着什么?
如何避免这种通知?
如果不避免,此类通知对应用程序的影响是什么?
问候,
萨里尔
我正在尝试创建一个新类,它将继承自ActiveRecord::Base需要从字符串动态生成的类
"general_systems".camelize.singularize = Class.new < ActiveRecord::Base
Run Code Online (Sandbox Code Playgroud)
但是我一直收到错误:
undefined method `singularize=' for "GeneralSystems":String
Run Code Online (Sandbox Code Playgroud)
我也尝试constantize过字符串
>> foo = "general_systems".camelize.singularize
=> "GeneralSystem"
>> foo.constantize
NameError: uninitialized constant GeneralSystem
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:124:in `block in constantize'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:123:in `each'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:123:in `constantize'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/core_ext/string/inflections.rb:43:in `constantize'
from (irb):4
from /usr/bin/irb:12:in `<main>'
>> foo.constantize = Class.new
NoMethodError: undefined method `constantize=' for "GeneralSystem":String
from (irb):5
from /usr/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
我相信我有一个rspec let和范围问题.我可以在示例中使用let定义的方法("it"块),但不能在外面(我执行let的describe块).
5 describe Connection do
8 let(:connection) { described_class.new(connection_settings) }
9
10 it_behaves_like "any connection", connection
24 end
Run Code Online (Sandbox Code Playgroud)
当我尝试运行此规范时,我收到错误:
connection_spec.rb:10:未定义的局部变量或类的方法`connection':0xae8e5b8(NameError)
如何将连接参数传递给it_behaves_like?
我是Ruby的新手,只是潜水.Ruby教程说我应该从这里获得包装系统:http://rubyforge.org/frs/?group_id = 126
我在Ubuntu Linux上.该页面有一个.tar和一个.gem选项供下载.我应该下载哪个?
宝石是否与Java jar完全相似?如果我可以根据需要逐个下载宝石,为什么我需要宝石包装系统呢?
如何修复此代码,以便以小写形式生成唯一的随机字母和数字?
api_string = (0...32).map{65.+(rand(25)).chr}.join
Run Code Online (Sandbox Code Playgroud)
目前,它只生成字母.
标题非常明显.有没有办法获得标题(除了Rack::Request.env[])?
ruby ×10
http ×1
http-headers ×1
postgresql ×1
rack ×1
random ×1
rspec ×1
rubygems ×1
ubuntu ×1