我正在这样的轨道中创建一个简单的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
做了一件非常相似的事情,这应该可行。
对此可能有什么可能的解释?
答案 0 :(得分:1)
错误显示没有.build
方法。如果您计划初始化Sportist
以进行编辑和更新操作,则需要从params
传递ID才能获得正确的模型。然后,对于create,您需要一个新对象。
因此,对于处理现有运动员的行为,您需要
@sportist = Sportist.find(params[:id])
以及诸如create或new之类的操作,您需要一个新对象
@sportist = Sportist.new
这些可以是由before_filter
挂钩为相关操作或操作方法本身运行的独立方法。
如果要统一这些,可以使用#assign_attributes
来设置已发布的参数,然后处理每个操作的保存,以便控制失败和成功的体验。
根据我的经验,这种封装类型并不值得,因为您失去了很多可读性并且封装了非常少的业务逻辑。