13

Hstore と動的アクセサーを使用して、Rails 4 の新しい強力なパラメーター要件を克服するのに問題があります。

:content複数の言語でコンテンツを保存するために使用したいHstore という名前の列が:en, :frあります。

store_accessor :content, [:en, :fr] #+226 random other il8n languages won't work.

Rails 4で1つの列に対して強力なパラメータをオーバーライドする(または動的なhstoreキーを許可する)にはどうすればよいですか?

  params.require(:article).permit(
    :name, :content,
    :en, :fr #+226 random translations
  )

短い...

params.require(:article).permit!

もちろん機能します。

4

3 に答える 3

0

人々が言っ​​たように、:content パラメータを許可するだけでは十分ではありません。ハッシュ内のキーも許可する必要があります。ポリシーの内容を維持して、次のようにしました。

  # 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
于 2014-12-04T00:26:32.607 に答える