我有一个非常简单的任务,不知道如何实现它。
主控制器如下所示:
class MainController < ApplicationController
def index
if render_text.include? "bar"
render :text => render_text, params: { :bar => true } # http://localhost:3000/main/index?bar=true
else
render :text => render_text # http://localhost:3000/main/index
end
end
private
def render_text
output = Page.find(params[:id])
end
end
基于数据库的输出,我想要将参数添加到url或只是渲染文本而不需要任何额外的url参数。
所以最好将网址看起来像这样:
http://localhost:3000/main/index?bar=true
答案 0 :(得分:0)
从我所看到的,您的代码存在许多问题:
- 你为什么要把一个参数传递给一个网址?
- 如果不创建新请求(I.E重定向)
,则无法将参数传递给URL 醇>
首先,为什么要将param传递给URL? Rails对sessions
有很大的支持,这使得它变得简单&amp;安全地传递后端数据。我很感激你可能希望在地址栏中看到某些参数,但在这种情况下我不明白(需要更多上下文)
其次,您使用render :text
作为输出。为什么呢?
当Rails处理入站请求时,它将使您的用户执行特定的控制器操作。因此,如果您有以下网址:domain.com/users/2
,则会点击users#show, id => 2
路线。当您在控制器中处理该路由时,输出将使用url中传递的数据(请求是一个操作)
您正尝试在同一操作中将params附加到url
。这不起作用 - 您必须重定向到附加了bar
参数的新操作:
#app/controllers/main_controller.rb
def index
bar = "true" if render_text.include? "bar"
redirect_to main_index_path(bar: bar)
end