rails 4 strong params + dynamic hstore keys

前端 未结 3 1845
长发绾君心
长发绾君心 2020-12-14 21:15

I\'m having a problem overcoming the new strong params requirement in Rails 4 using Hstore and dynamic accessors

I have an Hstore column called :content

相关标签:
3条回答
  • 2020-12-14 22:01

    I'm doing something similar and found this to be a bit cleaner and work well.

    Assuming a model called Article you can access your :content indexed stored_attributes like this: Article.stored_attributes[:content]

    So your strong params looks like this:

    params.require(:article).permit(:name, content: Article.stored_attributes[:content])
    

    Assuming your params are structured like: { article => { name : "", content : [en, fr,..] } }

    0 讨论(0)
  • 2020-12-14 22:12

    As people have said, it is not enough to permit the :content param - you need to permit the keys in the hash as well. Keeping things in the policy, I did that like so:

      # in controller...
    
      def model_params
        params.permit(*@policy.permitted_params(params))
      end  
    
      # in policy...
    
      def permitted_params(in_params = {})
        params = []
    
        params << :foo
        params << :bar
    
        # ghetto hack support to get permitted params to handle hashes with keys or without
    
        if in_params.has_key?(:content)
          content = in_params[:content]
          params << { :content => content.empty? ? {} : content.keys }
        end
      end
    
    0 讨论(0)
  • 2020-12-14 22:15

    If I understand correctly, you would like to whitelist a hash of dynamic keys. You can use some ruby code as follows to do this:

    params.require(:article).permit(:name).tap do |whitelisted|
      whitelisted[:content] = params[:article][:content] 
    end
    

    This worked for me, hope it helps!

    0 讨论(0)
提交回复
热议问题