Ruby on rails 为什么根路由不与用户一起工作#show?

Ruby on rails 为什么根路由不与用户一起工作#show?,ruby-on-rails,ruby,routes,root,Ruby On Rails,Ruby,Routes,Root,我尝试将此作为我的根路径root'users#show',以便在登录时将用户带到他的个人资料,但我遇到了以下错误: ActiveRecord::RecordNotFound in UsersController#show Couldn't find User with 'id'= @user = User.find(params[:id]) ArgumentError Missing :action key on routes definition, please check your ro

我尝试将此作为我的根路径
root'users#show'
,以便在登录时将用户带到他的个人资料,但我遇到了以下错误:

ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with 'id'= 
@user = User.find(params[:id])
ArgumentError
Missing :action key on routes definition, please check your routes.
root 'current_user'
当我通过使用profile作为自己的选项卡时,
  • 这是可行的,但我无法将
    根目录设置为“当前用户”
    ,否则我会出现以下错误:

    ActiveRecord::RecordNotFound in UsersController#show
    Couldn't find User with 'id'= 
    @user = User.find(params[:id])
    
    ArgumentError
    Missing :action key on routes definition, please check your routes.
    root 'current_user'
    

    谢谢您的时间。

    如果您需要将他重定向到
    显示
    操作并显示
    当前用户的详细信息,请将
    当前用户设置为
    @user

    def show
      @user = params[:id].nil? ? current_user : User.find(params[:id])
    end
    
    class UserController < ApplicationController
      # ...
      def profile
        @user = current_user # or any other logic relevant to fetching currently logged in User
      end
    end
    

    实际上,您提供的错误消息指出了问题所在

    如果您按照前面提到的
    root“users#show”
    定义了root,它将正确执行
    userscocontroller
    show
    操作,但如果您以“标准方式”执行该操作:

    它在这里失败,因为没有
    参数[:id]
    。该值是从url获取的。如果您正在指向url:

    localhost:3000/users/1
    
    参数[:id]
    的值为“1”

    因为您试图指向
    根路径

    localhost:3000
    
    没有参数
    :id
    绑定,因此:

    User.find(params[:id])
    
    抛出异常

    如果您想让它“以正确的方式”,请修改您的配置/routes.rb:

    并在您的
    用户控制器中

    def show
      @user = params[:id].nil? ? current_user : User.find(params[:id])
    end
    
    class UserController < ApplicationController
      # ...
      def profile
        @user = current_user # or any other logic relevant to fetching currently logged in User
      end
    end
    
    您可以将其解压缩到部分app/views/users/_user_details.html.erb,因此它包含以下内容:

    <h3><%= user.name %></h3>
    <small><%= user.bio %></small>
    
    在你的app/views/pages/home.hmtl.erb中也可以使用同样的方法,比如:


    show操作正在查找参数[:id],但在登录期间没有设置id

    尝试从当前用户处获取id:

    def show
      params[:id].nil? ? @user = current_user : @user = User.find(params[:id])
    end
    

    当您想显示其他用户的配置文件时,该条件可能会帮助您获取该用户的配置文件,例如,作为管理员。

    比我解释得更好。。一如既往,波维尔!谢谢你,波维尔!我一直试图通过实现一个条件函数来解决您提到的错误问题。我想我会保留根
    页面#home
    ,然后将我带到一个表单,在那里
    嘿,这是可能的!检查我的更新答案,这样我可以包含更多的代码片段!祝你好运谢谢你过去几个小时我一直在修改你的答案。终于明白了:)谢谢你的解释。再次感谢莎维!我不知道这是否可能,但我希望其他用户也能看到配置文件,因此,通过将其切换到当前用户,不仅当前用户能够看到它?再加上那一行,我还是犯了第一个错误。你认为我应该为根路由和其他所有人创建单独的配置文件吗?更新了我的答案,看看是否有帮助。是的,保留
    显示
    操作和视图以供公众查看,并创建另一个类似于
    仪表板
    的操作以显示自我配置文件。我担心建议的代码有一个明显的缺点-如果登录用户尝试访问任何其他用户配置文件(
    /users/1
    ),他将始终只看到自己的数据(
    current_user
    永远不会是“falsy”,因此
    user.find(params[:id])
    永远不会执行)@PawełDawczak,你完全正确。更新我的答案。抱歉,SharVy,我不得不给Pawel支票,因为虽然你的答案似乎正确,但他的答案也是正确的,他帮我把球从他的更新中移了一点。我希望我们仍然是朋友;)只需在“秒”中写一点注释-
    @user
    案例将是
    Fixnum
    而不是
    用户
    ——需要对
    查找
    用户
    进行额外查询。只是说;)
    class PagesController < ApplicationController
      def home
        @user = current_user
      end
    end
    
    def show
      params[:id].nil? ? @user = current_user : @user = User.find(params[:id])
    end