我使用的是管理0.11.0和search_term文本框,它工作得很好,现在我想添加一个请求参数my_search_condition_flag,它是一个影响搜索条件的布尔标志值。
在控制器的index操作中,我添加了以下行,以便使用此参数的请求通过Strong Parameters验证。
params.permit(:search, :my_search_condition_flag)index操作中的其余代码只是简单地从ApplicationController.rb of Administrate复制。
当我使用请求参数my_search_condition_flag=1发出HTTP请求时,我的index操作处理得很好,但是HTTP响应返回以下错误:
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 %>我已经尝试了我的仪表板类,介绍了这里
# -- 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我如何告诉Administrate允许我要添加的参数?
我是否必须使用请求body来代替?(我不想要)
发布于 2020-01-16 14:48:17
你走在正确的轨道上。正如您提到的,异常起源于/app/views/administrate/application/_search.html.erb:19。如果您在那里查看,您将看到它使用了clear_search_params方法,该方法还使用strong_parameters来允许/拒绝查询参数。您可以使用自己的助手来重写此操作。例如:
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这样的话,你就应该避免犯错误。
无可否认,这不是很好的解决办法。理想情况下,Administrate应该提供一些更好的方法来覆盖允许的搜索参数列表。想提交一份公关?;-)
https://stackoverflow.com/questions/56607539
复制相似问题