当您定义了 Rails 资源时,Rails 似乎会自动为该资源创建属性的 params 条目。例如如果我的模型 Lesson 有一个 subject 属性并且我发布 subject=Maths 它会自动创建 param[lesson] = { subject: 'Hello' }。我遇到的问题是让嵌套属性出现在这个创建的类(class)数组中。
我使用 mongoid 作为后端,并且与称为事件的类(class)有关联。代码如下所示:
class Lesson
include Mongoid::Document
field :subject, type: String
embeds_many :activities, class_name: 'LessonActivity' do
def ordered
@target.sort { |x, y| x.display_order <=> y.display_order }
end
def reorder!
@target.each_with_index { |val, index| val.display_order = index }
end
end
accepts_nested_attributes_for :activities
但是我无法弄清楚如何从 params.require(:lesson).permit :activities
中访问此事件
我可以通过 params.permit(:activities) 访问它,但这感觉有点困惑
最佳答案
我做了一些挖掘并发现了这是怎么回事。
这一切都来自 Rails 功能,Param 包装器,details和 api 。配置为 json 后会自动将模型的属性传递到模型名称的参数中(在本例中为 Lesson)。
模型的属性将根据模型对方法attribute_names
的响应方式进行填充,因此这给出了实现问题目标的两种途径。
1 - 指示我的 Controller 将事件作为类(class)参数的一部分,例如使用此方法:
class Api::LessonsController < Api::ApiController
wrap_parameters Lesson, include: Lesson.attribute_names << :activities
2 - 更新模型的 attiribute_names
方法以包含:activities
我仍然有一些问题需要解决,即关联不是 Mongoid 上 attribute_names 的一部分的原因,以及覆盖它以包含属性名称是否是一个坏主意。
关于ruby-on-rails - Rails 参数人口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20664312/