尝试在单独的视图文件中查看 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_to
和 has_many
关联,那么查找特定用户的集合的方法会稍微短一些,像这样:
def shopcollections
@user = User.find(params[:id])
@collections = @user.collections.order("created_at DESC")
end
这将与您之前的版本产生相同的影响,因为 Rails 将为 that 用户加载所有集合,因为您正在调用 [=22= 】 关系法。由于大多数活动记录方法 return 代理,您可以进一步调用其他方法,例如 order
,这将影响调用的 has_many
集合的过滤和排序(在本例中,Collection
对象)。希望这是有道理的,
我的用户创建 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_to
和 has_many
关联,那么查找特定用户的集合的方法会稍微短一些,像这样:
def shopcollections
@user = User.find(params[:id])
@collections = @user.collections.order("created_at DESC")
end
这将与您之前的版本产生相同的影响,因为 Rails 将为 that 用户加载所有集合,因为您正在调用 [=22= 】 关系法。由于大多数活动记录方法 return 代理,您可以进一步调用其他方法,例如 order
,这将影响调用的 has_many
集合的过滤和排序(在本例中,Collection
对象)。希望这是有道理的,