尝试通过不同的模型从一个视图页面链接到另一个视图页面

时间:2015-02-25 00:35:21

标签: ruby-on-rails ruby-on-rails-4 link-to

我创建了一个市场网站,我的用户(卖家)创建了集合,然后将列表添加到每个集合中进行销售。任何购物者现在都可以通过所有列表(主页)或所有馆藏( 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'

1 个答案:

答案 0 :(得分:0)

这是路由问题:

在Rails 4中,您可以访问:http://localhost:3000/rails/info/routes并查看所有路线。

您的shopcollected_path(collection)正确转到shopcollected_path,但:id是收藏ID。但是在你的行动中,你正在寻找用户:id并且它会中断。

如果您希望用户确定集合的范围,那么您将不得不在路由中的某个位置传入用户ID。我想你想要的是嵌套路由:

修改

您似乎总是希望在shopcollectionsshopcollected操作中查找用户。

<强>路由

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

我对你的人际关系做了一些假设,但我认为这就是你想要的。