多个model.save在1中如果条件有一个除非

时间:2014-05-16 14:15:01

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试保存response,如果在一个条件中不是issue,也会保存nil,因此我没有多个if / else条件使这个逻辑复杂化。

对于存在@response并且issue为nil的用例,这不会进入if块。

有没有明显的东西我没有看到或者我不能在这样的一行中写出我的逻辑?

注意:我知道应该使用一个交易,但我现在只是试图获得一个有效的原型。

  if @response.save && (issue.save unless issue.nil?)  # Does not get into the if block when @response exists and issue is nil
    p 'in save'
    format.html { redirect_to issue_path(params[:issue_id]), notice: success_message }
  else
    p 'not in save'
    format.html { render action: 'new' }
  end

这就是我现在所做的工作,我希望有一个更简单的1班轮而不是这个。

success = false

if issue.nil?
  if @response.save
    success = true
  end
else
  if @response.save && issue.save
    success = true
  end
end

if success
  p 'in save'
  format.html { redirect_to issue_path(params[:issue_id]), notice: success_message }
else
  p 'not in save'
  format.html { render action: 'new' }
end

2 个答案:

答案 0 :(得分:5)

你想要执行"成功"条件时:

  1. @response.save成功了
  2. issuenilissue不是nil且已成功保存。
  3. 因此,你可以这样做;

    if @response.save and (issue.nil? or issue.save)
      # Success
    else 
      # Fail
    end
    

答案 1 :(得分:3)

由于您在&&之后使用@response.save,如果是issue.nil?问题没有保存并返回一个零,这总是导致它给你一个零。我希望这会让你走上正轨。