(我自己学习RoR,如果这是一个明显的问题,请原谅我) 我有一个应用程序来跟踪存储在库中的书架上的书籍。请求应该如下:
GET books/library_id => shows all books on every shelf in a library
GET books/library_id/shelf_id => shows all books on one shelf in a library
GET books/library_id/shelf_id/book_id => shows a particular book
POST将使用类似的格式,除了我将在POST正文中使用JSON来提供书籍,书架或图书馆的信息(作者,发布日期,长度等)
我的问题是,[:params]传入我的控制器似乎持有查询(后面的任何内容?)和POST正文参数,但不是URL,我需要解析并用来确定要显示的内容。有没有办法从参数中得到这个?我试图避免像GET / books /?library_id / shelf_id
这样的东西答案 0 :(得分:0)
您可以设置路由,以便params
除查询字符串和/或发布数据外还包含特定的URL片段。
在config / routes.rb中:
get 'books/:library_id(/:shelf_id(/:book_id))', to: 'books#show'
在app / controllers / books_controller.rb中:
class BooksController < ApplicationController
def show
library_id = params[:library_id]
shelf_id = params[:shelf_id] # may be nil
book_id = params[:book_id] # may be nil
# TODO: Do something with library_id, shelf_id (if present),
# book_id (if present).
end
end
或者,如果您想使用某些非常自定义的逻辑处理URL,则可以使用通配符路由,如get 'books/*sometext', to: 'books#show'
。然后,在您的控制器操作中,您可以手动解析params[:sometext]
。这将被视为“不是Rails方式”,但如果您需要完全的灵活性,它就在那里。
最后,也许值得一提的是,在您的控制器操作中,您可以获取有关请求的信息,例如request.path
,request.fullpath
,request.url
。但在你的情况下听起来并不像你需要这样。