如何将嵌套模型中的动态 hstore 键列入白名单



我有这些关系:

class Applicant < ActiveRecord::Base
  has_many :answers
  accepts_nested_attributes_for :answers
end
class Answer < ActiveRecord::Base
  belongs_to :applicant
end

答案模型具有一个名为属性的 hstore 属性。属性哈希将具有动态键,因为它们是由用户在应用中创建的。

我似乎无法在申请人控制器中成功将这些动态键列入白名单。

这是我目前(不成功)的尝试。

def applicant_params
  params.require(:applicant).permit(:answers_attributes: [:question_id, :id]).tap do |whitelisted|
        whitelisted[:answers_attributes][:properties] = params[:applicant][:answers_attributes][:properties]
    end
end

感谢您的任何帮助。

UPD。尝试使用以下方法(在单独的文件中测试):

@params = ActionController::Parameters.new(
  applicant: {answers_attributes: { 
                "0" => {question_id: 10, id:  110, properties: {a: "b", c: "d"}}, 
                "1" => {question_id: 20, id:  120, properties: {m: "n", o: "p"}}
}})
def applicant_params
  #properties should be [:a, :c, :m, :o]
  properties = []
  @params[:applicant][:answers_attributes].values.each do |answer|
    properties |= answer[:properties].keys
  end
  @params.require(:applicant).permit(answers_attributes: 
                                       [:question_id, :id, properties: properties])
end

嘭。有一篇关于使用hstores的好文章。以及在 Rails 4 中使用 hstore 的一些一般内容。

最新更新