嗯,这不是一个好头衔,但问题就在这里。
[问题更新]
我有两个模型,Word和Definition。当用户查找单词时,定义将被登记,并且定义下方应该有一个表单,以便用户可以通过添加另一个定义来进行贡献。到目前为止没问题。但是如果搜索没有返回结果,我将要求用户创建Word及其第一个定义。
我不知道如何处理问题的形式和逻辑。它不仅仅是一种嵌套形式。因为form_for [@word, @word.definitions.build] do |form|
之类的东西不起作用,因为没有@word对象可以引用/新定义。
附录: 我似乎找到了一种方式here。它只是工作但不是那么干净。如果您认为有更好的解决方案,请分享。
答案 0 :(得分:0)
我的方法是实现表单对象(RailsCast)。我使用了一笔交易,所以我没有留下任何孤儿数据库记录。
在表单对象的submit方法中:
def submit
if dictionary_item.present?
# just save the entry
else
# start a transaction so both operations will either succeed or fail
ActiveRecord::Base.transaction do
# save the new dictionary_item
# save the entry
end
end
# return true if the objects are valid and persisted, false otherwise
end
请务必在交易中致电save!
或create!
。刘海很重要,因为必须引发错误才能触发回滚。