【发布时间】:2018-07-24 22:45:46
【问题描述】:
我的 Rails 4 中有这个课程,工作得非常好:
class Rule < ActiveModelSerializers::Model
# Required by ActiveModelSerializers in order to seralize this object
# @return [Hash] with all the attributes accessible for serialization
def attributes
...some attributes...
end
def initialize(args = {})
super
@some_custom_variable = ...something...
end
# This method is relevant
def assign_attributes(args)
args.each { |k, v| instance_variable_set("@#{k}", v) }
some_custom_variable.assign_attributes(args)
end
end
此类从控制器创建操作中调用,如下所示:
rule = Rule.new(permitted_params.symbolize_keys)
rule.save
我遇到的问题是在执行控制器代码时会调用assign_attributes(我知道这一点是因为我已经在里面放了断点),这只是在 rails 5 中发生的。
因此,控制器中相同的代码、相同的参数(由相同的测试生成)表现不同。使用 rails 5,代码永远不会以 assign_attributes 方法结束。
我的问题是为什么它在 rails 5 上表现得如此?为什么assign_attributes 会被触发?
【问题讨论】:
-
assign_attributes应该在做什么? -
save不是序列化程序上可用的方法,这是类名的拼写错误吗? -
@Schwern 显然被用于更新端点来分配属性,我不是此代码的作者,我正在尝试处理到 rails 5 的转换
-
@trueinViso
save不是拼写错误,是的,它没有覆盖原始方法,它正在做一些特定于应用程序的事情。
标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-5