我的模型中有很多关联。每次保存父级时,都会保存与父对象关联的每个记录。这是我想要的行为,而不是每一次。是否有一种特殊的方法来保存“母亲”。对象
答案 0 :(得分:0)
以下是不确定这是您要找的样品吗?
class Survey < ActiveRecord::Base
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
class Question < ActiveRecord::Base
belongs_to :survey
has_many :answers, :dependent => :destroy
accepts_nested_attributes_for :answers, :reject_if => lambda { |a| a[:content].blank? }, :allow_destroy => true
end
这里调查有很多问题,所以我从你的问题中假设当调查建立时问题不应该保存?现在让我们来看看Survey的控制器。
surveys_controller.rb
def new
@survey = Survey.new
@survey.build # here I have commented below lines which create the object for questions also
# 3.times do
# question = @survey.questions.build
# 4.times { question.answers.build }
# end
end
def create
@survey = Survey.new(params[:survey])
if @survey.save
flash[:notice] = "Successfully created survey."
redirect_to @survey
else
render :action => 'new'
end
end
答案 1 :(得分:0)
据我所知,默认情况下,如果您保存父类(模型),则不会保存belongs_to
关联。
要启用此功能,您需要autosave。
例如
class Post < ActiveRecord::Base
has_one :author, autosave: true
end
然而,进一步观察我发现这种默认行为因不同的关联而异。看看这个答案:When will ActiveRecord save associations?
答案 2 :(得分:0)
可以按每个关联打开或关闭自动保存关联模型的功能,例如:
class Post < ActiveRecord::Base
has_one :author, autosave: false
has_many :things, autosave: false
end
在此处阅读所有相关内容:https://api.rubyonrails.org/classes/ActiveRecord/AutosaveAssociation.html
答案 3 :(得分:0)
也许是您模型中的accepts_nested_attributes_for
。我也有同样的问题。我将其设置为save: false
,但这没有任何意义。我删除了accepts_nested_attributes_for
,然后说得通。希望对您有帮助。
答案 4 :(得分:-1)
不幸的是,没有这样的功能。
如果是has_many关联,如果子项为#new_record?
,子项将在保存其父项时保存。
如果只是在控制器中修改了params,我会避免保存它。