更新/保存连接模型中的属性

时间:2011-08-23 11:47:34

标签: ruby-on-rails ruby ruby-on-rails-3

我有一个名为AppServer的联接模型,它引用了另外三个名为EnvironmentServerApp的模型。我还在名为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'

知道为什么会这样吗?

如果你们需要更多代码,请告诉我们

1 个答案:

答案 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

Credit where due