尝试在单独的视图文件中查看 collection 用户创建的产品和 link_to/display

Trying to view a product collection a user created and link_to/display in a separate view file

我的用户创建 collection 并向每个 collection 添加列表。我有一个每个用户的主要个人资料页面,显示该用户创建的所有 collection。现在我想 link 从每个 collection 到一个单独的 collection 页面,显示 collection.

中的所有列表

我的用户查看文件显示所有 collections:

<% @collections.each do |collection| %>
    <%= image_tag listing.image.url(:thumb) %>
    <%= link_to "#{collection.name}", shopcollected_path(collection_id: @collection) %>
<% end %>

当我点击我的 link 时,我被带到个人 collection 页面 (shopcollected.html.erb) 就好了,但是那个 collection 的列表不是无法识别并且页面上没有列表。我知道我遗漏了一小部分,但我又一次陷入了困境。我仍在学习如何从数据库中检索 objects 和 linking。

我的listings_controller:

def shopcollections
    @user = User.find(params[:id])
    @collections = Collection.where(user: User.find(params[:id])).order("created_at DESC")
end

def shopcollected
    @user = User.find(params[:id])
    @listings = Listing.where(collection: :collection_id)
end

我的个人用户'shopcollected' 查看文件:

<% @listings.each do |listing| %>
    <%= image_tag listing.image.url(:medium) %>
    <%= listing.name %>`
<% end %>

我错过了什么?我认为我需要通过 collection 调用所有列表,但为了这样做,我需要在我的代码中更改哪里?

正如我们在评论中讨论的那样,有两个问题困扰着您的申请:

在用户看来,当您迭代 @collections 的集合时,您在循环内使用了错误的变量来引用当前的 Collection 对象(具体来说,@collection 而不是 collection)。应如下所示:

<% @collections.each do |collection| %>
    <%= image_tag listing.image.url(:thumb) %>
    <%= link_to "#{collection.name}", shopcollected_path(collection_id: collection) %>
<% end %>

另一个问题是 shopcollected 控制器方法。您只是在尝试从表单访问 :collection_id 值时忘记包含 params 部分。它应该是这样的:

def shopcollected
    @user = User.find(params[:id])
    @listings = Listing.where(collection: params[:collection_id])
end

一个不相关的小建议,它不会对性能产生影响,但会略微清理您的代码并使其看起来更 Rails-y;在 shopcollections 的情况下,假设您已经在模型中设置了正确的 belongs_tohas_many 关联,那么查找特定用户的集合的方法会稍微短一些,像这样:

def shopcollections
    @user = User.find(params[:id])
    @collections = @user.collections.order("created_at DESC")
end

这将与您之前的版本产生相同的影响,因为 Rails 将为 that 用户加载所有集合,因为您正在调用 [=22= 】 关系法。由于大多数活动记录方法 return 代理,您可以进一步调用其他方法,例如 order,这将影响调用的 has_many 集合的过滤和排序(在本例中,Collection 对象)。希望这是有道理的,