用params渲染文本

时间:2014-05-10 10:35:08

标签: ruby-on-rails render

我有一个非常简单的任务,不知道如何实现它。

主控制器如下所示:

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   

1 个答案:

答案 0 :(得分:0)

从我所看到的,您的代码存在许多问题:

  
      
  1. 你为什么要把一个参数传递给一个网址?
  2.   
  3. 如果不创建新请求(I.E重定向)
  4. ,则无法将参数传递给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