2012-02-01 61 views
2

我跟随Ryan Bates' guide on search functionality。我现在忽略了搜索算法的实现,只是返回到目前为止它正在做它应该做的事情,唯一的问题是现在当我访问/ posts时,我会自动重定向到/ posts/1。Rails:重定向仅在表单提交后显示

在我的职位控制器:

def show 
    end 

    def index 
     @post = Post.search params[:search] 
     puts ("----------------" + @post.to_s + "-----------") 
     respond_to do |format| 
     format.html { redirect_to @post } 
     end 
    end 

在我index.html.erb:

<%= form_tag posts_path, :method => 'get' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", :name => nil %> 
    </p> 
<% end %> 

在我Posts.rb

def self.search(search) 
    #insert search method here 
    return Post.find_by_id(1) 
end 

我怎样才能得到这个让我可以访问/发布并在我的表单中搜索而不会自动重定向?

回答

0

从你的实现中唯一的方法是检查params [:search]。这将是零如果你只是去/帖子

respond_to do |format| 
    format.html { redirect_to @post if !params[:search].nil? } 
    end 
+0

很酷。不是最干净的解决方案,但它绝对有效。 – varatis 2012-02-01 05:47:35

1

一旦你冲出你的Posts.search做一些真实的事情,情况并非如此。相反,有时候你会得到@posts = []@posts = nil(取决于你以后的情况),这将是它自己的问题。从长远来看,我认为你必须有类似

respond_to do |format| 
    format.html { @post.present? ? redirect_to(@post) : render(:index) } 
end 

而且分支逻辑,不知道瑞恩·贝茨是怎么做的究竟,但我总是在具有ActiveModel基于搜索模型中发现价值。如果它保持简单,不要担心,但如果搜索开始变成它自己的野兽,例如,如果有这样的技巧,这很好。特殊验证,多模型搜索等。

+0

我认为这个解决方案最终与Andrew的相同,因为默认情况下Rails呈现索引,尽管我会尝试一下,看看我是否得到不同的结果。不过,我会看看你对ActiveModel的看法。 +1 – varatis 2012-02-01 16:24:25