我在限制活动模型资源中序列化的关联级别时遇到问题.
例如:
一个游戏有许多团队,有很多玩家
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时,它包括子阵列中的所有团队,非常好,但也包括每个团队的所有玩家.这是预期的行为,但是可以限制关联级别吗?游戏只返回没有玩家的序列化团队吗?
是否可以使用强参数标记哈希的单个属性?
给出如下输入:
{
"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)
还有我能想到的任何事情.
有谁知道它可能吗?
在处理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)