【问题标题】:How do I create a dashboard link in my Rails user controller?如何在我的 Rails 用户控制器中创建仪表板链接?
【发布时间】:2017-04-26 18:33:18
【问题描述】:

我使用的是 Rails 5。当我的用户登录时,我想用通用的“/dashboard”主页链接替换“/users/4”操作。我还希望删除用户在浏览器中输入“/users/##”的能力,而只允许他们访问“/dashboard”。我该怎么做呢?目前,在我的 config/routes.rb 我有

  get '/dashboard', to: 'users#show'
  resources :users

在我的 users_controller.rb 文件中

  def show
    @user = User.find(params[:id])
    @user_subscriptions = UserSubscription.find_active_subscriptions_by_user(@user)
  end

但目前当我在浏览器中访问“/dashboard”时,我得到了错误

找不到具有 'id'=的用户

如何设置路线以禁用显示操作但允许 /dashboard 成功导航到上述操作?

【问题讨论】:

  • 你在用设计吗?
  • Nooooooooooooooo(需要额外的字符,否则不会发表评论)
  • 如果您想要一个好的建议,请使用 devise 进行认证。它将为您提供以更简单的方式制作所需内容的方法。此外,它还会为您提供通过 Facebook、Twitter、Googe+ 和其他 OAuth 提供商进行身份验证所需的结构。
  • 在您的这种情况下,一个 if 就可以解决所有这些问题,并且您可以使用 current_user 来避免您遇到的 Could't find User with 'id'= 错误...
  • 我对 Rails 有点陌生,也许这就是为什么我不明白你在描述什么。 “if”如何帮助重写我的 brokne “get '/dashboard', to: 'users#show'” 规则并禁用“show”操作?

标签: ruby controller routes config ruby-on-rails-5


【解决方案1】:

我喜欢做这样的事情

  get '/dashboard' => 'users#show', as: :dashboard

现在你可以这样做

link_to 'Dashboard', dashboard_path(current_user)

在控制器中你可以这样做

  def show
    params[:id] == current_user.id unless params[:id]
    @user = User.find(params[:id])
    @user_subscriptions = UserSubscription.find_active_subscriptions_by_user(@user)
  end

【讨论】:

  • 但是这个current_user 你是从devise gem 中挑选出来的,不是吗? OP没有使用设计。我在我的 cmets 中建议了它。
  • 没错,我必须找出他们在使用什么并将current_user 设置为他们正在使用的session[:user]
  • 为什么又找用户了?它已经在current_user
  • 您可能想查看其他用户的仪表板
  • 不,我绝对不希望用户查看彼此的仪表板,所以我假设 show 中的第一行将变为“params[:id] = current_user.id 除非 params[:id] "。
猜你喜欢
  • 2019-06-02
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多