【问题标题】:Rails: Passing params from URL to view without looking up the databaseRails:将参数从 URL 传递到视图而不查找数据库
【发布时间】:2015-07-09 02:58:48
【问题描述】:

我有一个类似example.com/test/THIS_TEXT 的网址。现在,当用户访问我的 URL 时,我只想按原样使用其路由的 html.erb 视图中的“THIS_TEXT”部分。

我知道它不再是 MVC,但我试图通过使流程独立于模型和数据库来避免一些开销。有没有一种简单的方法可以直接传递 URL 参数以在 Rails 中查看?

更新:

一些代码:

routes.rb

get "/d/:token", to: "games#show"

games_controller.rb

class GamesController < ApplicationController
    before_action :set_game, only: [ :edit, :update, :destroy]

    def show
        @text = params["token"]
    end
    #other scaffold stuff...
end

show.html.erb

Your entered text is <%= @text %>

错误

GamesController#show 中的 ActionController::ParameterMissing

参数丢失或值为空

【问题讨论】:

  • 更改您的参数密钥:@text = params[:token]
  • 你能在控制器的 show 方法中添加这个吗:raise params[:token].inspect - 输出是什么?
  • 感谢您的帮助,我找到了问题所在。我更改了应用程序布局以在每个页面中显示通知。那是产生错误。

标签: ruby-on-rails ruby-on-rails-4.2


【解决方案1】:

你是如何在 routes.rb 文件中声明 THIS_TEXT 的?

if if 被声明为类似

get '/test/:this_text'(注意:

然后您可以在控制器中以params[:this_text] 的身份访问它。

所以:

# in routes.rb 

get '/test/:test_text', to: 'tests#show_text'

# in tests_controller.rb

class TestsController < ApplicationController

  def show_text
    @text = params[:test_text]
  end
end

希望有帮助!

【讨论】:

  • 感谢您的回答。我添加了一些代码。如您所见,错误来自正确的控制器#action,所以我认为这不是路由问题。你以前尝试过这样的事情吗?
  • 没关系,application.html.erb 是这个问题的原因。你的代码是可靠的。
【解决方案2】:

您可以通过以下方式访问 params 哈希:

<%= params[:name_of_param] %>

参数的名称与您在 routes.rb 中输入的名称相同

【讨论】:

  • 我在问这个问题之前试过这个,它报告了一个错误,因为没有声明id。
  • ActionController::ParameterMissing 参数丢失或值为空
  • 你能告诉我路由是如何声明的以及你是如何引用参数的吗?
  • 感谢您的回答。我添加了代码供您查看。
【解决方案3】:

在您的控制器中:

@users_param = params[:users_param]

在你看来:

任何不安全的字符都应该被自动转义,但它可能会很长。这不会触及模型或数据库。它也不是特别反 MVC,只是碰巧没有使用该模型。破坏 MVC 会做一些事情,比如从 .html.erb 文件执行数据库查询。

【讨论】:

  • 我在问这个问题之前试过这个,它报告了一个错误,因为没有声明id。
  • ActionController::ParameterMissing 参数丢失或值为空
  • 听起来像是路由问题:见 RustComet 的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2018-02-20
  • 1970-01-01
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多