Acts_as_votable 路由问题

Acts_as_votable routing problems

我一直在使用 acts_as_votable gem,它适用于图片、评论和活动等内容。但我希望能够为其他用户点赞.

阅读文档我可以通过向模型添加 acts_as_votable 和 acts_as_voter 来做到这一点。

问题是我不知道如何调整我的路线以考虑到这一点,因为它的配置与其他路线略有不同。

在开发中,个人资料页面显示在 localhost:3000/@user.profile_name

路线是get '/:id', to: 'profiles#show', as: 'profile'.

使用 acts_as_votable 路线通常如下所示:

resources :comments do
member do
    put "like", to: "comments#upvote"
    put "dislike", to: "commentss#downvote"
  end
end

但是我该如何调整我现有的路线以类似的方式工作?

如果我使用

resources :profiles, only: :show, as: 'profile' do
    put 'like', on: :member
    put 'dislike', on: :member
end

这将作为 localhost:3000/profiles/@user.profile_name/like.

这不适用于以下内容:

def like
  @user = User.find_by_profile_name(params[:id])
  @user.liked_by current_user
  redirect_to profile_path(@user)
end

def dislike
  @user = User.find_by_profile_name(params[:id])
  @user.unliked_by current_user
  redirect_to profile_path(@user)
end

或者我喜欢/不喜欢的按钮。

<%= link_to dislike_profile_path(@user), method: :put, class: "btn btn-success btn-xs" do %>
  <i class="fa fa-heart-o"></i> Remove Hype
<% end %>

<%= link_to like_profile_path(@user), method: :put, class: "btn btn-success btn-xs"  do %>
  <i class="fa fa-heart"></i> Hype
<% end %>
resources :profiles, only: :show, path: '/' do
  member { put :like, :dislike }
end

并且您的链接应该可以正常工作

注意:通过在浏览器中输入路径,它将通过 get 而不是 put 完成,因此它不会工作,但我假设你知道这一点:-)