【问题标题】:How to use Ruby on Rails Params如何使用 Ruby on Rails 参数
【发布时间】:2016-04-10 17:41:50
【问题描述】:

我正在尝试在 Rails 上学习 ruby​​,并且正在按照“http://edgeguides.rubyonrails.org/getting_started.html#creating-articles”上的指南进行操作。 我目前对此感到困惑。

“确保您牢牢掌握了 params 方法,因为您将使用它 相当定期。

让我们考虑一个示例 URL: http://www.example.com/?username=dhh&email=dhh@email.com.

在这个网址中

params[:username] 

等于“dhh”和

params[:email] 

等于“dhh@email.com”。

我在理解参数是什么以及指南希望我如何使用它们时遇到了一些麻烦。

【问题讨论】:

  • 欢迎来到 StackOverflow。请花点时间阅读Help center中的提问指南
  • 参数是哈希(访问无关),用户名和电子邮件是哈希的键。
  • 我会说阅读基本教程,但似乎这就是你已经sruck的地方。

标签: ruby-on-rails


【解决方案1】:

嗯.. 我认为您的问题对于刚开始使用 Rails 的人来说已经足够有效了 - 但请注意,您应该使用代码块和引号来格式化您的问题。

Rails 中的params 哈希用于在用户请求(可以是浏览器或 API 请求)和 Rails 后端之间传递数据。

在您给出的示例中,参数是姓名和电子邮件,任何通过问号(?)后的 URL 传递的数据都将在 params 中发送。对该数据的需求取决于特定的操作,您将在控制器中“处理”该请求。

2 个参数样本:

  1. 您经营一家书店网站,并为用户提供一个搜索表单以查找一本书。该表单可能包含作者、标题、系列名称。用户知道该系列的相同是“发散”。但他们不记得作者了,他们想查看该系列的所有书籍。

您的 rails 参数将如下所示:

{"utf8"=>"✓", "authenticity_token"=>"24hb1lZ93NnOHOXmSB5STy7UYPmfH/Xx7dho5y/
MHeQhXqWUGNv58WexwoJNqYubsSQqj+5A==", "author"=>"","series_name"=>"divergent", 
"title"=>"", "commit"=>"Search", "controller"=>"books", "action"=>"search"}

因此,在您的 books_controller.rb 中,您将有一个称为搜索的操作。好吧,您的用户请求了一个搜索词,现在您需要执行搜索并将图书列表返回给他。

所以你的动作可能看起来像

def search
  # In this case your are offering 3 different filters, so you might have 3 different searches that you flatten to a single results array.
  authors = Book.where(author: params[:author])
  series = Book.where(series_name: params[:series])
  title = Book.where(title: params[:title])
  @books = [authors,series,title].flatten
end

现在您必须在 app/views/books/search.html.erb 中显示您的结果——随着学习 edgeguides 教程的进展,您将继续理解这些结果。

  1. 接下来,示例。假设您有一个送货车和电子商务网站。一位用户正在浏览女装区,正在查看围巾。假设她只想找到紫色围巾,而您为用户提供了一组颜色选项过滤器。她点击紫色按钮,你的参数可能看起来像

    {"dept"=>"scarves", "color"=>"purple", "controller"=>"products", "action"=>"index"}
    

本例中的参数是

  • 颜色
  • 控制器
  • 动作
  • 部门

这意味着您的页面正在响应 Products 控制器和名为“index”的操作。现在,在该操作中,您可以根据围巾和紫色创建过滤器,为用户提供他们需要的东西。

如果您在任何时候想要或需要查看 params 哈希以便更好地了解如何处理它,您可以使用

直接在浏览器中查看它
raise params.inspect 

你可以在控制器或视图中使用它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多