【问题标题】:undefined method `user_path'未定义的方法“user_path”
【发布时间】:2011-02-27 23:51:06
【问题描述】:

我正在尝试手动构建用户模型(不使用 routes.rb 文件中的“资源:用户”)。我的 routes.rb 文件如下所示:

match '/users/:id', :to => 'users#show'
match '/all_users', :to => 'users#index'

这是我在用户控制器中的索引方法:

def index
  @title = "All users"
  @users = User.paginate(:page => params[:page])
end

这是我的索引视图:

<h1>All users</h1>
<%= will_paginate %>
<ul class="users">
  <% @users.each do |user| %>
    <li>
      <%= link_to user.email, user %>
    </li>
  <% end %>
</ul>
<%= will_paginate %>

当我点击 localhost:3000/all_users: 时收到此错误消息:

undefined method `user_path'

我不明白这是从哪里来的。

编辑:

好的,我发现在视图中将 'user' 更改为 '@user' 可以正常工作:

<%= link_to user.email, @user %>

但是我真的不明白错误信息,或者'user'和'@user'之间的真正区别。另外,点击创建的链接不会重定向到用户的页面,它停留在 localhost:3000/all_users。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:
    match '/users/:id', :to => 'users#show' 
    

    应该是

    match '/users/:id', :to => 'users#show', :as => :user
    

    :as 参数告诉路由器将路由命名为什么(然后您可以将_path 或_url 添加到:as 参数中)。

    此外,任何时候您直接链接到 ActiveRecord 模型(例如 link_to user.email, user),它都会尝试将 user 转换为 user_path。

    【讨论】:

    • 对于使用 rails 4 的任何人,请改用 get '/users/:id', :to =&gt; 'users#show', :as =&gt; :user
    【解决方案2】:

    适用于在您的 routes.rb post '/users', :to =&gt; 'users#create', :as =&gt; :user 和您的控制器 render json: @user, status: :created, location: @user_path 中使用 rails 4 的每个人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 2013-06-11
      • 2010-12-30
      相关资源
      最近更新 更多