我試圖在我的創建方法中創建2個相關模型,其中第二個模型使用model1.model2s.build
創建。 model*_params
只是Rails 4強大的參數。重構相關嵌套如果
所以我有這個設置的代碼在我的創建方法:
def create
@model1 = current_user.model1.build(model1_params)
if @model1.save
@model2 = @model1.model2s.build(model2_params)
if @model2.save
redirect_to model1_path(@model1)
else
render 'new'
end
else
render 'new'
end
end
正如你可以看到有一個醜陋的嵌套,如果在方法,我不得不重複render 'new'
的秩序,這是不幹燥捕捉保存失敗。這是我可以保存model2
的唯一方法,因爲它需要與model1
的關係,並且model1
必須先保存,以便將model1
的id傳播到構建方法。
因此,我的問題是,我該如何重構這組代碼,以便它不需要嵌套if?
我喜歡使用&&運算符的,可悲的是,這並沒有爲我工作。我在調試後發現的是因爲我有一個驗證來驗證關聯('model1_id')的存在,並且因爲'model2'被認爲是無效的(因爲'model1_id'在'model1之前是'nil' '保存)。理想情況下,model1和model2都不應創建,要麼是無效的。這意味着我的代碼是錯誤的,有趣的。 –
然後你有更大的問題,我們不能真正解決你在這個問題上。 – meagar
好點。我會接受你的答案,主要是因爲我發現它更符合Rails的做事方式,並且我將在主要問題上提出另一個問題。 –