RoR控制器:创建/更新方法:@ record.save vs @ record.errors.any?

时间:2018-05-12 01:24:03

标签: ruby-on-rails

好吧,这可能会因为更多"样式偏好而被击落。而不是"详细问题",但谷歌让我失望。

在我自学成才的旅程中(从Rails 2开始),我学会了这样做:

class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:user_id])
    ...
    if @user.save
      # handle success
    else
      # handle failure
    end
  end
  ...
end

但是最近(Rails 4/5)我看到了使用它的模式:

class UsersController < ApplicationController
  ...
  def update
    @user = User.find(params[:user_id])
    ...
    @user.save
    if @user.errors.any?
      # handle failure
    else
      # handle success
    end
  end
  ...
end

这笔交易是什么?我错过了某种改进吗?

在野外发现:

(这两个来自我在第一次注意到变化的黑客马拉松时生成的相同代码库)

  1. events_controller.rb

  2. registrations_controller.rb

  3. (现在我正在搜索我的浏览器历史记录,我会在发现时发布更多内容)

1 个答案:

答案 0 :(得分:3)

第二种模式以不同的方式使用。 设置属性并使用保存时,它是多余的。 但通常可以使用$sql= mysqli_query($link, "INSERT into amazon_orders (AmazonOrderId, OrderStatus) VALUES $imploded "); 方法。所以第二种模式看起来像这样:

q1.samp = cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m1, sigma=sigma1))
q1.samp$origin <- "q1"
q2.samp = cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = m2, sigma=sigma2))
q2.samp$origin <- "q2"

q <- rbind(q1.samp, q2.samp)

ggplot(q, aes(x=s.1, y=s.2, z=prob, color = origin)) + 
  geom_contour() +
  coord_fixed(xlim = c(-25, 25), ylim = c(-25, 25), ratio = 1) 

因为create方法返回一个实例作为结果。

我认为此方法中的def create @user = User.create(user_params) if @user.errors.any? # handle failure else # handle success end end 更多地用于一致性和copypaste,因为create方法返回布尔值,您可以使用update的第一个模式。

update