小编Gre*_*sen的帖子

在活动模型序列化器中限制关联级联

我在限制活动模型资源中序列化的关联级别时遇到问题.

例如:

一个游戏有许多团队,有很多玩家

class GameSerializer < ActiveModel::Serializer
  attributes :id
  has_many :teams
end

class TeamSerializer < ActiveModel::Serializer
  attributes :id
  has_many :players
end

class PlayerSerializer < ActiveModel::Serializer
  attributes :id, :name
end
Run Code Online (Sandbox Code Playgroud)

当我为团队检索JSON时,它根据需要包括子阵列中的所有玩家.

当我为游戏检索JSON时,它包括子阵列中的所有团队,非常好,但也包括每个团队的所有玩家.这是预期的行为,但是可以限制关联级别吗?游戏只返回没有玩家的序列化团队吗?

ruby-on-rails-3 active-model-serializers

12
推荐指数
2
解决办法
4404
查看次数

需要属性的强参数

是否可以使用强参数标记哈希的单个属性?

给出如下输入:

{
  "example" => {
    "optional": 1234,
    "required": 5678
   }
}
Run Code Online (Sandbox Code Playgroud)

标准的强params例子是:

params.require(:example).permit(:optional, :required)

鉴于您可以要求某些参数,我认为以下内容可行:

params.require(:example).require(:required)
params.require(:example).permit(:optional)
Run Code Online (Sandbox Code Playgroud)

我试过了:

params.require(:example => [ :required ]).permit(:optional)
params.require(:example).permit(:optional)
params[:example].require(:required)
Run Code Online (Sandbox Code Playgroud)

还有我能想到的任何事情.

有谁知道它可能吗?

ruby-on-rails strong-parameters

6
推荐指数
1
解决办法
2998
查看次数

跨表单对象和模型的重复验证

在处理Form对象和常规Rails模型时,基本验证器在哪里?

遵循从Rails中的持久层解耦表单的概念.我已经设置了一个Form对象Cage,它可以一起创建两个对象...说Animal和Plant.

以下表格对象示例来自http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/或https://github.com/solnic/virtus或https://github.com/makandra/active_type,每个都表明Form对象本身有验证......没问题......部分好处包括能够以更加上下文的方式验证对象.

问题:

class Animal < ActiveRecord::Base

  validates :color, presence: true
  validate :only_one_brown

  private

  def only_one_brown
    if some_complex_thing
      errors.add(:color, 'can not have more than one brown animal.')
    end
  end
end

class Plant < ActiveRecord::Base
  validates :color, presence: true
end

class Cage
  include Virtus.model # or ActiveType or whatever
  include ActiveModel::Validations

  attribute :bird_color, String
  attribute :plant_color, String

  validates :bird_color, presence: true
  validates :plant_color, presence: true

  def save
    if …
Run Code Online (Sandbox Code Playgroud)

forms oop validation activerecord ruby-on-rails

5
推荐指数
1
解决办法
1214
查看次数