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