我正在尝试为类似按钮构建一个表单。这个like模型对不同类型的模型(评论/帖子/等)是多态的,属于某个用户。
例如,当这个用户正在查看博客项目时,我想在帖子下方显示一个赞按钮。我已经以某种方式设置了我的路由,即类似的路由总是嵌套在它们所指向的多态对象中:
因此,例如帖子:
#routes.rb
resources :posts do
resources :likes, only: [:create, :destroy]
end
所以一个帖子链接看起来像/posts/:post_id/likes/
(方法:帖子)
在控制器中,我创建了一个新的 Like 对象,将其分配给用户并保存。这完美地工作。
问题是当我尝试创建删除表单时。我真的不知道如何创建它,我知道链接应该是/posts/:post_id/like/:id
(方法:删除),但是以这种方式配置它会导致错误。
我认为表单也可以重构,但我不知道如何为这些“复杂”关系制作表单。
#shared/_like_button.html.haml
- if not @post.is_liked_by current_user
= form_for(@post.likes.build, url: post_likes_path(@post)) do |f|
= f.submit
- else
= form_for(@post.likes.find_by(user_id: current_user.id), url: post_like_path(@post), html: {method: :delete}) do |f|
= f.submit
我认为主要问题是post_like_path(@post)
没有正确渲染,因为我不知道:id
类似的东西。ActionController::UrlGenerationError
所以我在PostsController#show
尝试建立链接时不断出错。