使用 Adminstrate 添加请求参数时出现 Unpermitted parameter 错误
Unpermitted parameter error when adding request parameter while using Administrate
我正在使用 Administrate v0.11.0 和 search_term 文本框,
它工作得很好,
现在我想添加一个请求参数 my_search_condition_flag
,这是一个影响搜索条件的布尔标志值。
在我的 index
控制器操作中,
我添加了以下行,以便带有此参数的请求通过 Strong Parameters
验证。
params.permit(:search, :my_search_condition_flag)
index
操作中的其余代码只是从 Adminstrate 的 ApplicationController.rb 中复制而来。
当我使用请求参数 my_search_condition_flag=1
发出 HTTP 请求时,
我的 index
操作处理得很好,
但 HTTP 响应 returns 以下错误:
ActionController::UnpermittedParameters in Admin::MyPage#index
Showing /usr/local/bundle/gems/administrate-0.11.0/app/views/administrate/application/_search.html.erb where line #19 raised:
found unpermitted parameter: :my_search_condition_flag
由 search_term 文本框在 index.html.erb
中的渲染方法引发
<% if show_search_bar %>
<%= render(
"search",
search_term: search_term,
resource_name: display_resource_name(page.resource_name)
) %>
<% end %>
我已经在我的仪表板中尝试了以下 class,引入了 here:
# -- Overwrite the method to add one more to the permit list
def permitted_attributes
super + [:my_search_condition_flag] # -- Adding our now removed field to thepermitted list
end
如何告诉 Adminstrate 允许我要添加的参数?
我必须改用请求 body
吗? (我不想要)
你在正确的轨道上。正如您提到的,异常起源于 /app/views/administrate/application/_search.html.erb:19
。如果你看那里,你会看到它使用方法 clear_search_params
,它也使用 strong_parameters 到 allow/deny 查询参数。你可以用你自己的助手覆盖它。例如:
module Admin
module ApplicationHelper
def clear_search_params
params.except(:search, :page, :my_required_condition_flag).permit(
:per_page, resource_name => %i[order direction]
)
end
end
end
如果您这样做,您将收到一个新的相关错误。这次来自 /app/helpers/administrate/application_helper.rb:48
。那里的方法称为 sanitized_order_params
,可以类似地覆盖:
module Admin
module ApplicationHelper
# ...
def sanitized_order_params(page, current_field_name)
collection_names = page.item_includes + [current_field_name]
association_params = collection_names.map do |assoc_name|
{ assoc_name => %i[order direction page per_page] }
end
params.permit(:search, :my_required_condition_flag, :id, :page, :per_page, association_params)
end
end
end
至此,您应该没有错误了。
诚然,这不是一个很好的修复。理想情况下,管理应该提供一些更好的方法来覆盖这个允许的搜索参数列表。想提交 PR? ;-)
我正在使用 Administrate v0.11.0 和 search_term 文本框,
它工作得很好,
现在我想添加一个请求参数 my_search_condition_flag
,这是一个影响搜索条件的布尔标志值。
在我的 index
控制器操作中,
我添加了以下行,以便带有此参数的请求通过 Strong Parameters
验证。
params.permit(:search, :my_search_condition_flag)
index
操作中的其余代码只是从 Adminstrate 的 ApplicationController.rb 中复制而来。
当我使用请求参数 my_search_condition_flag=1
发出 HTTP 请求时,
我的 index
操作处理得很好,
但 HTTP 响应 returns 以下错误:
ActionController::UnpermittedParameters in Admin::MyPage#index
Showing /usr/local/bundle/gems/administrate-0.11.0/app/views/administrate/application/_search.html.erb where line #19 raised:
found unpermitted parameter: :my_search_condition_flag
由 search_term 文本框在 index.html.erb
中的渲染方法引发 <% if show_search_bar %>
<%= render(
"search",
search_term: search_term,
resource_name: display_resource_name(page.resource_name)
) %>
<% end %>
我已经在我的仪表板中尝试了以下 class,引入了 here:
# -- Overwrite the method to add one more to the permit list
def permitted_attributes
super + [:my_search_condition_flag] # -- Adding our now removed field to thepermitted list
end
如何告诉 Adminstrate 允许我要添加的参数?
我必须改用请求 body
吗? (我不想要)
你在正确的轨道上。正如您提到的,异常起源于 /app/views/administrate/application/_search.html.erb:19
。如果你看那里,你会看到它使用方法 clear_search_params
,它也使用 strong_parameters 到 allow/deny 查询参数。你可以用你自己的助手覆盖它。例如:
module Admin
module ApplicationHelper
def clear_search_params
params.except(:search, :page, :my_required_condition_flag).permit(
:per_page, resource_name => %i[order direction]
)
end
end
end
如果您这样做,您将收到一个新的相关错误。这次来自 /app/helpers/administrate/application_helper.rb:48
。那里的方法称为 sanitized_order_params
,可以类似地覆盖:
module Admin
module ApplicationHelper
# ...
def sanitized_order_params(page, current_field_name)
collection_names = page.item_includes + [current_field_name]
association_params = collection_names.map do |assoc_name|
{ assoc_name => %i[order direction page per_page] }
end
params.permit(:search, :my_required_condition_flag, :id, :page, :per_page, association_params)
end
end
end
至此,您应该没有错误了。
诚然,这不是一个很好的修复。理想情况下,管理应该提供一些更好的方法来覆盖这个允许的搜索参数列表。想提交 PR? ;-)