【问题标题】:Rails Routing Issue, No Route Matches for Actions I defined in the controllerRails 路由问题,我在控制器中定义的操作没有路由匹配
【发布时间】:2016-02-19 02:34:20
【问题描述】:

所以我现在正在阅读一本关于 Rails 开发的书,但遇到了一个问题。我有一个带有一些操作的“用户”控制器。我在其中定义的操作之一是“跟随”但是,每当我尝试使用 rails 助手在我的视图中链接到该操作时,它都会告诉我我没有定义该路线。这是我的控制器的样子:

class UsersController < ApplicationController   
def follow
    @user = User.find(params[:id])
    if current_user.follow!(@user)
        redirect_to @user, notice: "Follow successful!"
    else 
        redirect_to @user, alert: "Error following."
    end
end

我尝试通过两种方式链接到此。这是第一个:

<%= link_to "Follow", {action: 'follow'}, class: 'btn btn-default' %>

这会产生错误:“No route matches {:action=>"follow", :controller=>"users", :id=>"2"}"

这里是第二种方式:

<%= link_to "Follow", follow_user_path(@user), class: 'btn btn-default' %>

这会产生消息:“# 的未定义方法 `follow_user_path'”

即使我运行 rake 路由,路径也不会显示在那里,即使我已经在我的 routes.rb 文件中定义了

resources :users

我现在完全不知所措。我做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby routing routes


    【解决方案1】:

    您尚未定义路线。 resources :users 只会定义不会覆盖follow 的 RESTful 路由。为了涵盖这一点,你可以这样写:

    resources :users do
      member do
        get :follow
      end
    end
    

    它会生成如下 URL:

    /users/USER_ID/follow
    

    然后从视图中,您可以像这样链接到它:

    <%= link_to "Follow", follow_user_path(USER_ID), class: 'btn btn-default' %>
    

    请务必将 USER_ID 替换为实际的用户 ID!

    【讨论】:

    • 做到了。我的印象是,如果你在控制器中定义了一个动作,就会为它生成路由。感谢您的帮助。
    【解决方案2】:

    据我了解,似乎没有跟随路线,因此在您的 routes.rb 中,您需要放置以下内容: 获取“/follow”,到:“users#follow”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2023-03-31
      相关资源
      最近更新 更多