【问题标题】:dots in rails URLrails URL中的点
【发布时间】:2014-04-17 22:57:31
【问题描述】:

我正在尝试向我的设计用户添加一个显示页面,但似乎无法正确传递 id 值,如何创建指向显示页面的链接?出于某种原因,rails 正在对 URL 执行此操作 /show.1

用户控制器:

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

用户/show.html.erb

<h1><%= @user.username %></h1>

指向用户个人资料的链接也给了我问题 id no method

<%= link_to @post.email, users_show_path(@user.id) %>

routes.rb

 get "users/show"
 get "pages/faq"
 get "pages/about"
 devise_for :users
 resources :posts

【问题讨论】:

    标签: ruby-on-rails-4 devise routes user-profile


    【解决方案1】:

    您已将显示路线定义为:

    get "users/show"
    

    请注意,此路由中没有动态段,例如 :id。这意味着您的路线不希望传递任何值。但是在链接到这条路线时,您通过了@user.id

    <%= link_to @post.email, users_show_path(@user.id) %>
    

    路线没有预料到。因此,Rails 假设您正在传递 format(如 .html.json 等),这就是为什么您会看到形成为 users/show.1 的 url。

    要解决这个问题,我建议您在路由中添加一个动态段,以正确捕获用户的id

    改变

     get "users/show"
    

     get "users/show/:id" => "users#show", as: :users_show
    

    对于具有id = 1 的用户,当您单击用户个人资料链接时,生成的网址将是http://yourdomain/users/show/1

    【讨论】:

    • 我通过在devise for :users 下方添加resources :users 来修复它,但它仅在我有链接current_user.id 时才有效,如果我输入@user.id 我没有方法错误,@post.username 我得到couldn't find user with id=dexter
    • 这个建议对我帮助很大!
    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 2014-05-12
    • 2023-03-16
    • 2016-08-08
    • 2014-11-11
    相关资源
    最近更新 更多