Ruby 在 rails。使用 ransack 和 geocoder 过滤结果
Ruby on rails. Filtering results with ransack and geocoder
我目前正在过滤我的索引页上的结果。我有 'gigs' 使用地理编码器进行地理编码。我也在尝试使用 ransack 来过滤同一页面上同一模型中的其他属性。
到目前为止,我可以使用 ransack 过滤结果,我可以单独按位置过滤结果,但我不能 link 两者一起,例如,如果我在某个日期后过滤所有演出,这些将显示,但如果我将位置添加到过滤器查询中,列表将不会改变。不过地图会显示位置。
到目前为止,这是我的代码。
演出控制器
def index
if params[:search].present?
@gigs = Gig.near(params[:search], 200, :order => 'distance' )
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
else
@gigs = Gig.all
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
end
@q = Gig.ransack(params[:q])
@gigs = @q.result(distinct: true)
end
我更改了搜索行为的顺序,但我不能 link 将两者放在一起。我目前这样保留它只是为了显示代码。
Index.html
<div class="search-filters">
<div class="search-location">
<%= search_form_for @q do |f| %>
<%= form_tag gigs_path, :method => :get do %>
<p>
<%= f.search_field :date_gteq, placeholder: "From" %>
<%= f.search_field :date_lteq, placeholder: "Until" %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Near", :name => nil %>
</p>
<% end %>
<%= sort_link(@q, :date) %>
<% end %>
</div>
</div>
在此先感谢您在link将这些放在一起时提出的任何建议。
好的,经过进一步的研究,我意识到我可以 link 将两者放在一起。我不理会索引,但更换了控制器。
控制器:
def index
if params[:search].present?
@q = Gig.near(params[:search], 200, :order => 'distance' ).ransack(params[:q])
@gigs = @q.result(distinct: true)
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
else
@q = Gig.ransack(params[:q])
@gigs = @q.result(distinct: true)
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
end
end
我现在稍微清理一下。
我目前正在过滤我的索引页上的结果。我有 'gigs' 使用地理编码器进行地理编码。我也在尝试使用 ransack 来过滤同一页面上同一模型中的其他属性。
到目前为止,我可以使用 ransack 过滤结果,我可以单独按位置过滤结果,但我不能 link 两者一起,例如,如果我在某个日期后过滤所有演出,这些将显示,但如果我将位置添加到过滤器查询中,列表将不会改变。不过地图会显示位置。
到目前为止,这是我的代码。
演出控制器
def index
if params[:search].present?
@gigs = Gig.near(params[:search], 200, :order => 'distance' )
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
else
@gigs = Gig.all
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
end
@q = Gig.ransack(params[:q])
@gigs = @q.result(distinct: true)
end
我更改了搜索行为的顺序,但我不能 link 将两者放在一起。我目前这样保留它只是为了显示代码。
Index.html
<div class="search-filters">
<div class="search-location">
<%= search_form_for @q do |f| %>
<%= form_tag gigs_path, :method => :get do %>
<p>
<%= f.search_field :date_gteq, placeholder: "From" %>
<%= f.search_field :date_lteq, placeholder: "Until" %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Near", :name => nil %>
</p>
<% end %>
<%= sort_link(@q, :date) %>
<% end %>
</div>
</div>
在此先感谢您在link将这些放在一起时提出的任何建议。
好的,经过进一步的研究,我意识到我可以 link 将两者放在一起。我不理会索引,但更换了控制器。
控制器:
def index
if params[:search].present?
@q = Gig.near(params[:search], 200, :order => 'distance' ).ransack(params[:q])
@gigs = @q.result(distinct: true)
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
else
@q = Gig.ransack(params[:q])
@gigs = @q.result(distinct: true)
@hash = Gmaps4rails.build_markers(@gigs) do |gig, marker|
marker.lat gig.latitude
marker.lng gig.longitude
marker.title gig.title
end
end
end
我现在稍微清理一下。