阻止直接创建Rails3模型(仅允许从另一个模型中创建)

时间:2012-08-03 19:31:57

标签: ruby-on-rails ruby model

我想确定

MyModel.new # ...raises an error...

那个

MyOtherModel::create_my_model # ...only this should work!

这是一个很好的方法吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

没有直接的AFAIK。以下应该可以工作。

class MyModel < ActiveRecord::Base
  ..
  belongs_to :my_other_model
  def initialize( need_this_argument = nil )
    raise if need_this_argument.nil?
    super() # It is important to put the () here.
  end
end

class MyOtherModel < ActiveRecord::Base
...
  has_one :my_model
  accepts_nested_attributes_for :my_model
  def create_my_model(arguments)
    MyModel.new( true ) # Pass a non nil argument
  end
end

MyModel.new#=&gt; RuntimeError
a = MyOtherModel.new
b = a.create_my_model
..#在这里做你的东西
b.save
a.save