Rails - 在重定向时将变量传递给不同的页面
Rails - pass variable to different page on redirect
如果您能提供帮助,我们将不胜感激。我将 pg_search 添加到我的项目中,如果根本没有搜索结果,则需要将用户重定向回来。这是我的搜索控制器。
/app/controllers/results_controller.rb
class ResultsController < FrontendController
def index
@search_results = PgSearch.multisearch(params[:query])
if @search_results.empty?
redirect_to :back(@search_results)
end
end
end
这里是我尝试获取搜索结果的布局:
/app/views/layouts/application.html.slim
...
.search-result class="#{'visible' unless @search_results?}
' 0 results
...
我得到的只是
/app/views/layouts/application.html.slim:165: syntax error, unexpected ')' ...isible' unless@search_results?))).to_s)); _temple_html_attri... ... ^
/app/views/layouts/application.html.slim:168: syntax error, unexpected keyword_do_cond, expecting ')' ...method: :get, role: 'search' do; ... ^
/app/views/layouts/application.html.slim:171: syntax error, unexpected keyword_end, expecting ')' ; end; @output_buffer.safe_concat(... ^ /app/views/layouts/application.html.slim:194: syntax error, unexpected keyword_ensure, expecting ')'
/app/views/layouts/application.html.slim:196: syntax error, unexpected keyword_end, expecting ')'
我从 Whosebug 获得了几种不同的方法,但没有任何帮助。我究竟做错了什么? Rails4.2.5.1,Ruby2.2.3
不要重定向回来。而是呈现一个视图,告诉用户没有搜索结果。否则,当您点击后退按钮时,您将陷入无限循环。
class ResultsController < FrontendController
def index
@search_results = PgSearch.multisearch(params[:query])
end
end
# app/views/results/index.html
<% if @search_results.any? do %>
<% @search_results.each do |r| %>
<% end %>
<% else %>
No results.
<%= render 'some_kind_of_form' %>
<% end >
为什么语法错误?
在redirect_to :back
中:back
是文字符号。您不能在 Ruby:
中调用文字
irb(main):001:0> :foo("bar")
SyntaxError: (irb):1: syntax error, unexpected '(', expecting end-of-input
:foo("bar")
如果你想扩充 url 使用 url_for(:back)
与 request.referrer
相同。
# see https://ruby-doc.org/stdlib-2.1.2/libdoc/uri/rdoc/URI/HTTP.html
uri = URI(url_for(:back))
uri.query = { foo: 'bar' }.to_query
redirect_to uri
如果你想获取路由对象,你可以这样做:
Rails.application.routes.recognize_path(url_for(:back), method: :get)
如果您能提供帮助,我们将不胜感激。我将 pg_search 添加到我的项目中,如果根本没有搜索结果,则需要将用户重定向回来。这是我的搜索控制器。
/app/controllers/results_controller.rb
class ResultsController < FrontendController
def index
@search_results = PgSearch.multisearch(params[:query])
if @search_results.empty?
redirect_to :back(@search_results)
end
end
end
这里是我尝试获取搜索结果的布局:
/app/views/layouts/application.html.slim
...
.search-result class="#{'visible' unless @search_results?}
' 0 results
...
我得到的只是
/app/views/layouts/application.html.slim:165: syntax error, unexpected ')' ...isible' unless@search_results?))).to_s)); _temple_html_attri... ... ^
/app/views/layouts/application.html.slim:168: syntax error, unexpected keyword_do_cond, expecting ')' ...method: :get, role: 'search' do; ... ^
/app/views/layouts/application.html.slim:171: syntax error, unexpected keyword_end, expecting ')' ; end; @output_buffer.safe_concat(... ^ /app/views/layouts/application.html.slim:194: syntax error, unexpected keyword_ensure, expecting ')'
/app/views/layouts/application.html.slim:196: syntax error, unexpected keyword_end, expecting ')'
我从 Whosebug 获得了几种不同的方法,但没有任何帮助。我究竟做错了什么? Rails4.2.5.1,Ruby2.2.3
不要重定向回来。而是呈现一个视图,告诉用户没有搜索结果。否则,当您点击后退按钮时,您将陷入无限循环。
class ResultsController < FrontendController
def index
@search_results = PgSearch.multisearch(params[:query])
end
end
# app/views/results/index.html
<% if @search_results.any? do %>
<% @search_results.each do |r| %>
<% end %>
<% else %>
No results.
<%= render 'some_kind_of_form' %>
<% end >
为什么语法错误?
在redirect_to :back
中:back
是文字符号。您不能在 Ruby:
irb(main):001:0> :foo("bar")
SyntaxError: (irb):1: syntax error, unexpected '(', expecting end-of-input
:foo("bar")
如果你想扩充 url 使用 url_for(:back)
与 request.referrer
相同。
# see https://ruby-doc.org/stdlib-2.1.2/libdoc/uri/rdoc/URI/HTTP.html
uri = URI(url_for(:back))
uri.query = { foo: 'bar' }.to_query
redirect_to uri
如果你想获取路由对象,你可以这样做:
Rails.application.routes.recognize_path(url_for(:back), method: :get)