Ruby on Rails中如何通过URL而非entry-id获取Contentful entries?
实现方案
你可以使用Contentful查询接口的字段过滤能力,替换原有按ID查询的逻辑,具体实现如下:
如果你使用的是contentful_rails/contentful_model封装的模型类
直接调用where方法按page_url字段过滤即可,写法如下:
# 请将参数键替换为你实际存储page_url的请求参数名,此处示例为params[:page_url] @blog = Blog.locale("en-US").where(page_url: params[:page_url]).first
如果你使用的是原生contentful.rb SDK
需要指定内容类型ID,且自定义字段要加fields.前缀,写法如下:
# 初始化客户端的代码可复用你现有逻辑,不用重复写 client = Contentful::Client.new( space: '你的Contentful空间ID', access_token: '你的内容交付API令牌', environment: 'master' ) @blog = client.entries( content_type: 'blog', # 替换为你Blog内容模型的ID 'fields.page_url' => params[:page_url], locale: 'en-US' ).first
注意事项
- 提前在Contentful后台对应Blog内容模型的设置中,给
page_url字段开启允许过滤权限,否则会查询失败 - 建议给
page_url字段设置唯一值校验,避免匹配到多条条目,导致first方法取到非预期内容 - 路由层需要同步调整,把原来传entry ID的
aci参数,替换为传页面路径的page_url参数
内容的提问来源于stack exchange,提问作者Ashwini Padwal
相关产品推荐
相关产品推荐

