2

我有一个属性搜索页面 (:controller => 'properties', :action => 'index'),它由一个右侧边栏组成,该边栏有一个搜索表单,在表单下方显示搜索结果。当用户单击右侧边栏中的属性时,我想在左侧索引页面的主要区域中显示该属性的详细信息。

右侧边栏是一个名为 properties/_property.html.erb 的部分:

<%= form_tag properties_path, :method => 'get' do %>
<%= text_field_tag 'location', (params[:location]) %>
<%= select_tag(:max, options_for_select([['No Max', ""], ['$100,000', 100000], ['$200,000', 200000], etc %>
more search fields for baths beds etc
<%= submit_tag "Search", :name => nil %>
<% end %>

<% @properties.each do |property| %>
<%= link_to([property.Address,property.City].join(", "), {:action => 'show', :id => property.id}) %>
<li><strong><%= number_to_currency(property.Price, :precision => 0) %></strong></li>
etc etc
<% end %>

我知道如何显示属性详细信息的唯一方法是使用“显示”操作,但这会将用户带到一个新页面,例如 localhost:3000/properties/1865。我制作了与“索引”视图具有相同布局的“显示”视图,并使右侧边栏成为部分(properties/_property.html.erb),它同时出现在“显示”和“索引”上,所以当用户单击右侧边栏中的属性并转到 localhost:3000/properties/1865 属性详细信息正确显示在主区域中,右侧边栏在右侧。

但是因为 localhost:3000/properties/1865 与 localhost:3000/properties/index 是不同的页面,所以右侧边栏中的搜索表单忘记了它的参数,这意味着右侧边栏中的搜索结果列表已更改回默认列表的所有属性。

如何在索引页面的部分中显示“显示”操作,以便右侧边栏中的表单记住用户的搜索参数?或者,如果我必须进入“显示”页面,我怎样才能让右侧边栏保持原样?

任何想法都非常感谢,只是一个正确方向的建议会很好,花了一整天的时间试图弄清楚但无处可去,谢谢

4

1 回答 1

2

我制作了与索引视图具有相同布局的显示视图,并使右侧边栏成为部分(properties/_property.html.erb),它同时出现在显示和索引上。

是的,但这只会为您提供两个页面的类似布局。您希望列表在不同请求之间保持不变。

你基本上有两个选择。使用 session 来记住我不会推荐的列表。

其他是您使用表单 :remote => true 或 ajax 并部分更新页面。

编辑:

您使用的是什么版本的导轨?你的应用程序中加载了 jquery 吗?

按照这个SO POST

你可能需要稍微改变你的表演动作。

respond_to do |format|
  format.js {render :partial => 'property_details' ,:layout => false}
  format.html 
end

为属性详细信息创建一个部分,并将正文内容放在这里。

链接看起来像

<%= link_to "link name", {:action => :show, :id => item_id}, :remote => true ,:html => {:class => 'links_product'} %>

还要更新您可能使用的视图(确保您的页面中有 rails.js):

$(document).ready(
     function(){
          $("a.links_product").bind("ajax:success",
                   function(evt, data, status, xhr){                           
                        $("#response").html(data); // in case data is html. (_*.html.erb)
           }).bind("ajax:error", function(evt, xhr, status, error){
                   console.log('server error' + error );
           });
});

有一个带有 idresponse或任何有效 id 的 div。完毕!

于 2013-05-07T05:20:01.310 回答