我有一个模特:
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
是空的。如何让它“非空”?
答案 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对象的引用。