Rails为什么没有.build工作,但是.new - 是吗?

时间:2014-12-03 17:16:49

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

我正在这样的轨道中创建一个简单的CRUD:

def new
  build_sportist
end

private

def build_sportist
  @sportist ||= Sportist.build
  @sportist.attributes = sportist_params
end

并在undefined method 'build'方法中为Sportist收到以下错误:build_sportist。由于我使用build_sportist方法进行创建,新建,编辑和更新操作,因此我不想将其设置为.new,据我所知,.new.build做了一件非常相似的事情,这应该可行。

对此可能有什么可能的解释?

1 个答案:

答案 0 :(得分:1)

错误显示没有.build方法。如果您计划初始化Sportist以进行编辑和更新操作,则需要从params传递ID才能获得正确的模型。然后,对于create,您需要一个新对象。

因此,对于处理现有运动员的行为,您需要

@sportist = Sportist.find(params[:id])

以及诸如create或new之类的操作,您需要一个新对象

@sportist = Sportist.new

这些可以是由before_filter挂钩为相关操作或操作方法本身运行的独立方法。

如果要统一这些,可以使用#assign_attributes来设置已发布的参数,然后处理每个操作的保存,以便控制失败和成功的体验。

根据我的经验,这种封装类型并不值得,因为您失去了很多可读性并且封装了非常少的业务逻辑。