ruby-on-rails - Rails 参数人口

标签 ruby-on-rails ruby-on-rails-4 mongoid

当您定义了 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 包装器,detailsapi 。配置为 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/

相关文章:

ruby-on-rails - Rspec: capybara 选择不工作

ruby-on-rails - 在 mongoid 上进行全文搜索所需的建议

java - AES CBC PKCS5Padding Java 到 Ruby

Rails4 form_for 中的 JSON 数据类型

sorting - 如何按属性对对象进行排序?

ruby-on-rails - 使用 mongoid-elasticsearch gem 对搜索结果进行排序

ruby-on-rails - Mongoid 填写引用的 id

使用 link_to 时 JavaScript 不执行

ruby-on-rails - 当 Test::Unit 测试运行时,我如何才能看到实际发生了什么?

jquery - 使用 Kaminari gem 进行 Ajax 分页