通过错误操作处理 Ransack Rails 问题
Issue with Ransack Rails processes via the wrong action
我在我的 Rails 5.2 应用程序中使用 Ransack 来使用过滤器进行搜索。它在控制器中使用索引操作并正确呈现结果,直到我尝试在同一控制器中的另一个操作中创建第二个过滤器。一旦我在新操作的视图中使用过滤器,它就会显示过滤器仍在使用原始操作进行处理。
我将在下面添加原始的和新的 action/views。似乎无法告诉 ransack 专门处理特定的操作。
原始工作代码
活动#索引
def index
@category_list = Category.all.order("name ASC")
# Get non expired events
@events = Event.where("expiry > ?", Time.now)
@events = @events.all
@events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")
#ransack
@search = @events.ransack(params[:q])
@data = @search.result(:distinct => true)
@events = @data.to_a
end
索引视图(仅相关位)
<%= search_form_for([:admin, @search], remote: true ) do |f| %>
<div class="wrapper" id="event_listing">
<%= render partial: "/admin/events/events-list", locals: {events: @events} %>
</div>
所以索引页面呈现部分结果@events
index.js.erb
$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();
一切正常。
现在,如果我添加一个名为 expired_events 的新操作,代码为
def expired_events
@category_list = Category.all.order("name ASC")
# Get expired events
@events = Event.where("expiry < ?", Time.now)
@events = @events.all
@events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")
#ransack
@expired_search = @events.ransack(params[:q])
@data = @expired_search.result(:distinct => true)
@events = @data.to_a
end
我的路线也有了新的浏览量
routes.rb
resources :events do
collection do
get 'destroy_multiple_images'
get 'destroy_single_image', action: "destroy_single_image"
get 'expired_events'
end
end
expired_events.html.erb
<%= search_form_for([:admin, @expired_search], remote: true ) do |f| %>
<div class="wrapper" id="event_listing">
<%= render partial: "/admin/events/events-list", locals: {events: @events} %>
</div>
这里的要点是告诉搜索表单关于 admin 命名空间中的不同变量。我假设渲染器会在 js 中查找相同的名称,如下所示。
expired_events.js.erb
$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();
现在,当我从 expired_events 查看页面点击过滤器按钮时,Rails 在服务器中显示它仍在处理 index.js.erb 文件。有谁知道如何具体告诉它呈现正确的 js 搜索表单?
我几乎可以肯定呈现的局部变量中的变量不会产生影响,就好像我可以从正确的搜索表单中将 Ransack 转到 运行 结果应该根据操作而改变。
我在 expired_events 页面时的屏幕截图
然后,当我使用过滤器时,我得到的结果显示过滤器仍在使用 index.js 文件。
如有任何帮助,我们将不胜感激。谢谢大家。
知道了。谢谢。
如果有人有更简洁的外观或更正确的方法,我将非常感谢。特别是能够告诉表单使用如下所示的操作。
<%= search_form_for([:admin, @expired_search], url: url_for(controller: 'events', action: 'expired_events'), remote: true ) do |f| %>
我在我的 Rails 5.2 应用程序中使用 Ransack 来使用过滤器进行搜索。它在控制器中使用索引操作并正确呈现结果,直到我尝试在同一控制器中的另一个操作中创建第二个过滤器。一旦我在新操作的视图中使用过滤器,它就会显示过滤器仍在使用原始操作进行处理。
我将在下面添加原始的和新的 action/views。似乎无法告诉 ransack 专门处理特定的操作。
原始工作代码
活动#索引
def index
@category_list = Category.all.order("name ASC")
# Get non expired events
@events = Event.where("expiry > ?", Time.now)
@events = @events.all
@events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")
#ransack
@search = @events.ransack(params[:q])
@data = @search.result(:distinct => true)
@events = @data.to_a
end
索引视图(仅相关位)
<%= search_form_for([:admin, @search], remote: true ) do |f| %>
<div class="wrapper" id="event_listing">
<%= render partial: "/admin/events/events-list", locals: {events: @events} %>
</div>
所以索引页面呈现部分结果@events
index.js.erb
$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();
一切正常。
现在,如果我添加一个名为 expired_events 的新操作,代码为
def expired_events
@category_list = Category.all.order("name ASC")
# Get expired events
@events = Event.where("expiry < ?", Time.now)
@events = @events.all
@events = @events.paginate(:page => params[:page], :per_page => 12).order("created_at DESC")
#ransack
@expired_search = @events.ransack(params[:q])
@data = @expired_search.result(:distinct => true)
@events = @data.to_a
end
我的路线也有了新的浏览量
routes.rb
resources :events do
collection do
get 'destroy_multiple_images'
get 'destroy_single_image', action: "destroy_single_image"
get 'expired_events'
end
end
expired_events.html.erb
<%= search_form_for([:admin, @expired_search], remote: true ) do |f| %>
<div class="wrapper" id="event_listing">
<%= render partial: "/admin/events/events-list", locals: {events: @events} %>
</div>
这里的要点是告诉搜索表单关于 admin 命名空间中的不同变量。我假设渲染器会在 js 中查找相同的名称,如下所示。
expired_events.js.erb
$('#event_listing').html('<%= j render partial: "/admin/events/events-list", locals: {events: @events} %>');
$('.collapsible').collapsible();
现在,当我从 expired_events 查看页面点击过滤器按钮时,Rails 在服务器中显示它仍在处理 index.js.erb 文件。有谁知道如何具体告诉它呈现正确的 js 搜索表单?
我几乎可以肯定呈现的局部变量中的变量不会产生影响,就好像我可以从正确的搜索表单中将 Ransack 转到 运行 结果应该根据操作而改变。
我在 expired_events 页面时的屏幕截图
然后,当我使用过滤器时,我得到的结果显示过滤器仍在使用 index.js 文件。
如有任何帮助,我们将不胜感激。谢谢大家。
知道了。谢谢。
如果有人有更简洁的外观或更正确的方法,我将非常感谢。特别是能够告诉表单使用如下所示的操作。
<%= search_form_for([:admin, @expired_search], url: url_for(controller: 'events', action: 'expired_events'), remote: true ) do |f| %>