gpt4 book ai didi

ruby-on-rails - 接受单表继承的嵌套属性

转载 作者:行者123 更新时间:2023-12-02 03:28:44 24 4
gpt4 key购买 nike

我正在尝试消除处理 STI 模型的 Controller 中重复的强参数。例如我有模型:

class Recipe < ActiveRecord::Base
has many :fruits
accepts_nested_attributes_for :fruits, allow_destroy :true
end

class Fruit < ActiveRecord::Base
belongs_to :recipe
end

class Apple < Fruit
end

class Orange < Fruit
end

class RecipesController < Admin::BaseController
...
def update
@recipe.update_attributes recipe_params
end
...
def recipe_params
params.require(:recipe).permit( :some_recipe_params
...
??? )
end
end

是否有任何方便的方法来允许“apple_attributes”和“orange_attributes”而不在许可选项中重复它们?以后的应用会有更多的水果种类。或者水果模型应该在另一个 Controller 中处理。

我发现了一种使用白名单的丑陋方法:

params.require(:recipe).permit( ... ).tap do |whitelisted|
Recipe.fruit_types.each do |type|
whitelisted[:"#{type.pluralize}_attributes"] = params[:recipe][:"#{type.pluralize}_attributes"] || {}
end
end

最佳答案

许可证应如下所示:

params.require(:recipe).permit fruits: [:id, :_type, ...]

所有水果都必须存在属性“_type”,否则您只能允许来自基本模型(水果)的属性

关于ruby-on-rails - 接受单表继承的嵌套属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28792694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com