Ruby on rails Rails:重定向为仅在表单提交后显示

Ruby on rails Rails:重定向为仅在表单提交后显示,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.1,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.1,我跟在后面。我现在忽略了搜索算法的实现,只返回到目前为止它正在做它应该做的事情,唯一的问题是现在当我访问/posts时,我会自动重定向到/posts/1 在我的帖子中: def show end def index @post = Post.search params[:search] puts ("----------------" + @post.to_s + "-----------") respond_to do |format|

我跟在后面。我现在忽略了搜索算法的实现,只返回到目前为止它正在做它应该做的事情,唯一的问题是现在当我访问/posts时,我会自动重定向到/posts/1

在我的帖子中:

  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
在my index.html.erb中:

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

我如何才能获得此信息,以便在不被自动重定向的情况下访问/发布并在表单中搜索?

实现此功能的唯一方法是检查参数[:search]。如果你只是去邮局,这将是零

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

一旦你刷新了你的帖子。搜索做一些真实的事情,情况就不会是这样了。相反,有时你会得到
@posts=[]
@posts=nil
(取决于你的目标),这将是它自己的问题。从长远来看,我认为您必须有类似的分支逻辑

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

另外,我也不知道Ryan Bates到底是如何做到的,但我总是觉得有一个基于的搜索模型很有价值。如果它保持简单,不用担心,但是如果搜索开始变成自己的野兽,比如特殊验证、多模型搜索等,那么把它放在你的技巧包里就很好了。

我认为这个解决方案最终和Andrew的一样,因为默认情况下Rails呈现索引,尽管我会尝试一下,看看是否会得到不同的结果。不过我会看看你对ActiveModel说了些什么+1.
respond_to do |format|
  format.html { @post.present? ? redirect_to(@post) : render(:index) }
end