为控制器中的“新”操作创建嵌套模型

时间:2013-06-21 06:15:11

标签: ruby-on-rails ruby

我有一个模特:

class MyModel < ActiveRecord::Base
  attr_accessible #.....

  belongs_to :owner
end

还有控制器的动作:

  def new
    @data1 = MyModel.new
  end

观点:

= f.select :owner_id, options_from_collection_for_select(MyModel.some_scope, :id, :full_name, @data1.owner.id)

显然,@data1.owner.id是空的。如何让它“非空”?

2 个答案:

答案 0 :(得分:1)

@data1.owner.id为空的原因是因为@data1没有所有者。

您可以通过将此行添加到控制器中的新操作来生成所有者:

@data1.create_owner

您传递给此方法的参数是您所有者的属性。例如,他们可能有一个Marius的first_name:

@data1.create_owner(first_name: 'Marius')

看到你在新方法中这样做,除非你对所有者的任何属性都有一些非空约束,我认为你可能只想把它留空。

@data1创建此所有者时,应使用ID填充它,使@data1.owner.id“非空”。

答案 1 :(得分:-1)

如果您在创建新MyModel时“知道”所有者,您可以这样做(假设own是所有者的对象的引用):

@data1 = own.mymodels.new()

所以@data1应该是对{My}设置为拥有owner_id的新MyModel对象的引用。