Rails:重定向仅在表单提交后显示

时间:2012-02-01 02:32:38

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在关注Ryan Bates' guide on search functionality。我现在已经省略了搜索算法的实现,只返回到目前为止它正在做它应该做的事情,唯一的问题是现在当我访问/发布时,我会自动重定向到/ 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

在我的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

如何在不自动重定向的情况下访问/发布和搜索我的表单?

2 个答案:

答案 0 :(得分:1)

一旦你将Posts.search刷新为真实的东西,情况就不会如此。相反,您有时会得到@posts = []@posts = nil(取决于您所追求的内容),这将是它自己的问题。从长远来看,我认为你必须有类似于

的分支逻辑
respond_to do |format|
  format.html { @post.present? ? redirect_to(@post) : render(:index) }
end

另外,不确定Ryan Bates是如何完成的,但我总是觉得有一个基于ActiveModel的搜索模型的价值。如果它保持简单,不要担心它,但如果搜索开始变成它自己的野兽,那么将它放在你的技巧中是很好的,例如。特殊验证,多模型搜索等。

答案 1 :(得分:0)

实施的唯一方法是检查params [:search]。如果你刚去/发布

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