我试图在我的创建方法中创建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的做事方式,并且我将在主要问题上提出另一个问题。 –