我希望能够在我的UsersController中添加一个名为home的新方法。
现在控制器有这个
def home
@user = User.find(params[:id])
end
我在路线文件
上添加了这个 match '/user_home', to: 'users#home', via: 'get'
我在users文件夹上创建了View home.html.erb。
我收到了这个错误:
无法找到没有ID的用户。
有人可以帮助我吗?
答案 0 :(得分:4)
替代方法:
resources :users do
member do
get 'home'
end
end
这样您就可以获得路线/users/:id/home
。 member
关键字可以确保块中定义的操作的ID。
您可以在Rails指南中了解有关路由的更多信息 - http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
答案 1 :(得分:0)
您需要指定该路径有一个' id'参数at。
match '/user_home/:id', to: 'users#home', via: 'get'
您还应该添加' id'您尝试访问的链接的参数。
例如:localhost/user_home/16
答案 2 :(得分:0)
这是因为params [:id]的值是nil,因为你没有发送任何用户的id:因此,“find”方法会抛出一个ActiveRecord :: RecordNotFound,因为它需要一个真实的id才能找到用户
如果您不希望home方法抛出错误,可以使用“find_by_id”方法:
def home
@user = User.find_by_id(params[:id])
end
但是如果你想传递一个id(应该是这种情况),你应该使用:
match '/user_home/:id', to: 'users#home', via: 'get'
然后Rails将识别您网址中的“id”部分,并将其传递给参数。
答案 3 :(得分:0)
如果不更新您的路线以包含:id
,则必须使用以下网址:
/user_home?id=21
如果你想要一个自定义路径助手,可以这样:
match '/user_home/:id' => 'users#home', via: :get, as: 'user_home'
然后你可以使用:
<%= user_home_path(22) %>
或
<%= user_home_path(id: 23) %>
在您的观点中。
或者是完全合格的路径:
<%= user_home_url(id: 23) %>