Ruby on rails Rails:重定向为仅在表单提交后显示
我跟在后面。我现在忽略了搜索算法的实现,只返回到目前为止它正在做它应该做的事情,唯一的问题是现在当我访问/posts时,我会自动重定向到/posts/1 在我的帖子中: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|
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