Acts_as_votable路由问题

时间:2015-01-07 11:30:45

标签: ruby-on-rails routes

我一直在使用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 %>

1 个答案:

答案 0 :(得分:1)

resources :profiles, only: :show, path: '/' do
  member { put :like, :dislike }
end

您的链接应该正常运行

注意:在浏览器中键入路径,它将通过get,而不是put来完成,所以它不会起作用,但我猜你知道这一点: - )