【发布时间】:2015-05-03 01:51:34
【问题描述】:
每当我创建一个新对象时,我都想创建一个在视图中可用但在提交时不保存的嵌套对象。
到目前为止,我的主模型控制器如下所示:
def new
@main = Main.new
@tmp = Sub.new
@tmp.hide = 1
@main.subs << @tmp
end
其中hide 是一个整数字段,指定它是否是假模型。
我的问题hide 值在我单击提交后似乎不存在(它存在于视图中)。
例如,如果我正常提交,@tmp 会与任何其他字段一起保存。但是如果我尝试在显示中显示hide,则会显示@tmp,但它的hide 值不是。
hide 默认为零。所以提交后会出现,控制器中的更改不存在。
我的理解是我可以使用:
accepts_nested_attributes_for :subs, :allow_destroy => true, :reject_if => proc { |a| a[:hide] == 1 }
在main 模型中,但这似乎不起作用。
如何创建模型,使其永远不在数据库中,或者在将父模型保存到数据库时删除?
深入:
我有一个 Experiments 模型 has_many exptypes。
在我的form 中,我使用了嵌套形式的 gem,因此(通过尝试将它与标签混合),@experiment.exptypes 不能为空。
hide 属性在第 93 行和第 118 行用于确定是否隐藏选项卡。
这样,每当创建 experiment 时,它们将是数组中已经存在的假 exptype,我不希望在提交时保存它。
【问题讨论】:
-
去查看/提交时不保存你能澄清发生了什么吗?
hide值是否在页面加载后正确显示在表单/页面中(意味着您可以检查它并在浏览器中查看它),或者您是说提交表单时它没有正确发送? -
对不起,我把自己弄糊涂了。我已经重写了这个问题。我说的是第二种,页面提交后好像没有发送。
-
好的,这更清楚了。请参阅下面的答案,让我知道它是否有所作为。除了在控制器中创建
Sub对象的方式之外,可能还有几件事会导致此问题,因此如果解决方案失败,您可能需要进一步隔离问题发生的位置。
标签: ruby-on-rails activerecord model