我有一个名为AppServer
的联接模型,它引用了另外三个名为Environment
,Server
和App
的模型。我还在名为AppServer
的{{1}}模型中添加了另一个字段,因为我为app_server_id
模型设置了id => false
。我在填充表格之后添加了AppServer
字段,之后又没有进一步使用other question。
因为我现在有app_server_id
,我尝试使用app_server_id
模型中的以下方法填充它:
AppServer
然而,在rails控制台中,我想看看该方法是否有效,所以我这样做了:
def generate_id
"#{environment_id}_#{app_id}_#{server_id}"
end
因此,现在尝试更新属性或保存它将无法正常工作:
pry(main)> AppServer.first.generate_id
=> "2_3_1"
或
pry(main)> AppServer.first.app_server_id = AppServer.first.generate_id
=> "2_3_1"
pry(main)> AppServer.first.app_server_id
=> nil
甚至
pry(main)> AppServer.first.update_attribute(:app_server_id, AppServer.first.generate_id)
NoMethodError: undefined method `eq' for nil:NilClass
from C:/Ruby192/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/whiny_nil.rb:48:in `method_missing'
知道为什么会这样吗?
如果你们需要更多代码,请告诉我们
答案 0 :(得分:1)
此
pry(main)> AppServer.first.app_server_id = AppServer.first.generate_id
=> "2_3_1"
pry(main)> AppServer.first.app_server_id
=> nil
不起作用,因为您正在分配app_server_id,而不是保存它,然后再次引用保存的版本(nil)。
对于此
undefined method `eq' for nil:NilClass
看到这个问题
undefined method `eq' for nil:NilClass with rails 3 and ruby enterprise on ubuntu hardy
修改
我认为不自动增加此功能没有任何好处所以我会使用此迁移添加id列并删除您的to_param方法:
def self.up
execute "ALTER TABLE 'app_servers'
ADD COLUMN 'id' INT(11) AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY('id')"
end