我创建了一个市场网站,我的用户(卖家)创建了集合,然后将列表添加到每个集合中进行销售。任何购物者现在都可以通过所有列表(主页)或所有馆藏( sections.html.erb )购物。部分视图页面上的每个集合显示前3个列表图像以及集合的名称。
我希望能够直接从 sections.html.erb 页面点击个人收藏页 shopcollected.html.erb ,其中会显示该收藏中的所有商家信息
另外,我创建了一个用户商店页面,显示该用户的所有馆藏( shopcollections.html.erb )。从那里我可以成功点击任何收藏品名称,然后转到个人收藏页面 shopcollected.html.erb ,一切都很好。
但是当我点击 sections.html.erb 中的集合名称(在这种情况下,它的collection_id = 13)时,我收到此错误:
"ActiveRecord::RecordNotFound in ListingsController#shopcollected"
"Couldn't find User with 'id'=13".
网址显示:
http://localhost:3000/shopcollected/13
我看到这是识别collection_id,但它没有识别该集合的用户。但我认为我的控制器def shopcollected 已经定义了用户,所以不应该没问题吗?是我的" link_to"中缺少的部分?我很困惑......
控制器def 部分:
@collections = Collection.includes(:listings).order(created_at: :desc)
查看文件 sections.html.erb 链接:
<%= link_to "#{collection.name}", shopcollected_path(collection) %>
Controller def shopcollections :
@user = User.find(params[:id])
@listings = Listing.where(collection: params[:collection_id])
@collection = Collection.find(params[:collection_id])
查看文件 shopcollections.html.erb 链接:
<%= link_to "#{collection.name}", shopcollected_path(collection_id: collection) %>
Controller def shopcollected :
@user = User.find(params[:id])
@collection = Collection.find(params[:collection_id])
@listings = Listing.where(collection: params[:collection_id])
途径:
get '/pages/sections' => 'pages#sections', as: 'sections'
get '/shopcollections/:id' => 'listings#shopcollections', as: 'shopcollections'
get '/shopcollected/:id' => 'listings#shopcollected', as: 'shopcollected'
答案 0 :(得分:0)
这是路由问题:
在Rails 4中,您可以访问:http://localhost:3000/rails/info/routes并查看所有路线。
您的shopcollected_path(collection)
正确转到shopcollected_path
,但:id
是收藏ID。但是在你的行动中,你正在寻找用户:id并且它会中断。
如果您希望用户确定集合的范围,那么您将不得不在路由中的某个位置传入用户ID。我想你想要的是嵌套路由:
修改强>
您似乎总是希望在shopcollections
和shopcollected
操作中查找用户。
<强>路由强>
get '/pages/sections' => 'pages#sections', as: 'sections'
resources :users do
get 'shopcollections/:id' => 'listings#shopcollections', as: 'shopcollection'
get 'shopcollected/:id' => 'listings#shopcollected', as: 'shopcollected'
end
<强> listings_controller.rb 强>
def shopcollections
@user = User.find(params[:user_id])
@shopcollection = @user.collections.find(params[:id])
@listings = @shopcollection.listings # I imagine this is a relationship?
end
def shopcollected
@user = User.find(params[:user_id])
@shopcollection = @user.collections.find(params[:id])
@listings = @shopcollection.listings # I imagine this is a relationship?
end
我对你的人际关系做了一些假设,但我认为这就是你想要的。