まずあなたがチェックすることができますあなたのApplicationPolicy
にいくつかの素晴らしいショートカットを追加することもできます。
class ApplicationPolicy
#...
def permits_attributes?(*attrs)
attrs.keep_if({|a| permits_attribute?(a) }).any?
end
def permits_attribute?(attr)
permitted_attributes.include?(attr)
end
# ...
end
次に、(フォームビルダを拡張またはモジュール)カスタムフォームビルダを作成することができます:
class MyFormBuilder < ActionView::Helpers::FormBuilder
def can_fill_in?(attr)
yeild if @template.policy(object).permits_attribute?(attr)
end
end
<%= form_for(@project, builder: MyFormBuilder) do |f| %>
<%= f.can_fill_in?(:title) do %>
<%= f.label :title %>
<%= f.text_field :title %>
<% end %>
<% end %>
また、カスタムFOを使用するようにレールを構成することができます
ActionView::Base.default_form_builder = MyFormBuilder
参照:デフォルトでは、RMビルダー
出典
2016-04-18 07:22:38
max
おかげで、私は、アプリケーションポリシーにメソッドを追加し、カスタムフォームビルダを作成したが、私はアクセスできないようですヘルパーからのポリシー。 # "のための"未定義のメソッド 'ポリシー"を取得しました –
bmesuere
@ template.policyを呼び出そうとしましたか?私はタイプミスをしてスペースで書きました。 @templateは、フォームビルダークラスではなく、ポリシーを持つビューコンテキストへのリンクです。 – max
はい、@ template.policyとview_context.policyの両方を試しました。ビュー自体では問題なくポリシーにアクセスできます。 – bmesuere