我正在设置基于this answer的共享链接,用户可以根据需要创建尽可能多的共享链接(并单独撤销)。
生成令牌,然后将其保存到一个表格中,该表格包含相关的user_id
,link
(link =令牌)和note
,用户可以输入该表来记住谁/什么他们通过此链接授权。所有这些链接都转到同一个用户页面(即内容不会改变,但您应该能够通过删除其令牌来撤销特定人员对该页面的访问权限。)
查找关联内容的常用路线是users/:id/profile
。如何设置路由以获取令牌值并映射到正确的地址。如果公共链接没有公开用户ID号(例如链接将转到users/profile/:link
)
如果生成的链接很有用,那么这是生成链接的模式
create_table "sharings", force: :cascade do |t|
t.string "link"
t.text "note"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["user_id"], name: "index_sharings_on_user_id"
end
修改
所以我试图设置它的方式是,可以有多个:link
映射到同一个地方。我理解上面连接的答案的方式是它只会将一个:token
映射到一个id。为此,我希望用户能够创建多个链接(由user_id
绑定在一起)。
我在想这样的事,但我收到错误undefined method user_id for #<ActiveRecord::Relation []>
路线(第一个工作,它是我想要映射第二个的路径)
get 'users/:id/profile', to: 'users#profile', as: :profile
get 'users/profile/:link', to: 'sharings#shared_profile', as: :shared_profile
控制器动作(我不知道渲染是否是正确的显示方式,但我想显示页面而不是重定向到具有用户ID的地址)
def shared_profile
@link = Sharing.where(link: :link)
@user_id = @link.find(user_id)
render profile_path(@user_id)
end
编辑2
这就是我的想法。也有可能有更好的方法来设置它,而不是我做的。