Rails 检索显示控制器中的所有记录
Rails retrieving all records in show controller
在我的 rails 类别显示控制器中,我的设置是这样的
def show
@categories = Category.find_by(params[:name])
end
但是当我访问这个控制器时,它 returns 在类别而不是单个类别中找到的所有产品记录。
这是我的视图控制器中类别
的代码
<div class="grid">
<% @categories.products.each do |product| %>
<%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
</div>
<div class="product-text">
<h2 class="product-title"> <%= product.name %></h2>
<h3 class="product-price">£<%= product.price %></h3>
</div>
<% end %>
<% end %>
</div>
我做错了什么?
首先,出于安全考虑,您永远不应信任参数哈希来检索记录。如果您使用散列作为参数,Rails 将 "make the data safe"。使用下面的代码:
def show
@category = Category.find_by(name: params[:name])
end
其次,通常在展示页面上,您只想检索一条记录,因此变量应命名为单数。我在上面更正了。
第三,如果您在发布示例时使用适当的缩进,它会有所帮助。它使我们更容易为您提供帮助。
第四,下面这行(我把@categories
改成了@category
)基本上是说:"Now that I have this single category, find all the products associated with it in the products
table and put them into the |product|
variable for iteration"
<% @category.products.each do |product| %>
我不确定你想对类别做什么,但如果你保留这行代码,它将始终显示所有产品。也许你只想显示最近的 3 个,在这种情况下你可以这样做:
在您的控制器中:
def show
@category = Category.find_by(name: params[:name])
@recent_products = @category.products.order(created_at: :desc).limit(3)
end
在您看来:
<div class="grid">
<% @recent_products.each do |product| %>
<%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
</div>
<div class="product-text">
<h2 class="product-title"> <%= product.name %></h2>
<h3 class="product-price">£<%= product.price %></h3>
</div>
<% end %>
<% end %>
</div>
你可以这样做
在您的控制器中,您可以编写此代码
def show
@category = Category.find_by_name(params[:name])
end
在您看来它会起作用
<div class="grid">
<% @category.products.each do |product|%>
// place your code what you want to display
<% end %>
</div>
希望对您有所帮助,如果您有任何疑虑,请告诉我。
在我的 rails 类别显示控制器中,我的设置是这样的
def show
@categories = Category.find_by(params[:name])
end
但是当我访问这个控制器时,它 returns 在类别而不是单个类别中找到的所有产品记录。
这是我的视图控制器中类别
的代码<div class="grid">
<% @categories.products.each do |product| %>
<%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
</div>
<div class="product-text">
<h2 class="product-title"> <%= product.name %></h2>
<h3 class="product-price">£<%= product.price %></h3>
</div>
<% end %>
<% end %>
</div>
我做错了什么?
首先,出于安全考虑,您永远不应信任参数哈希来检索记录。如果您使用散列作为参数,Rails 将 "make the data safe"。使用下面的代码:
def show
@category = Category.find_by(name: params[:name])
end
其次,通常在展示页面上,您只想检索一条记录,因此变量应命名为单数。我在上面更正了。
第三,如果您在发布示例时使用适当的缩进,它会有所帮助。它使我们更容易为您提供帮助。
第四,下面这行(我把@categories
改成了@category
)基本上是说:"Now that I have this single category, find all the products associated with it in the products
table and put them into the |product|
variable for iteration"
<% @category.products.each do |product| %>
我不确定你想对类别做什么,但如果你保留这行代码,它将始终显示所有产品。也许你只想显示最近的 3 个,在这种情况下你可以这样做:
在您的控制器中:
def show
@category = Category.find_by(name: params[:name])
@recent_products = @category.products.order(created_at: :desc).limit(3)
end
在您看来:
<div class="grid">
<% @recent_products.each do |product| %>
<%= link_to product_path(id: product.slug, category_name: product.category.name), class: "card" do %>
<div class="product-image">
<%= image_tag product.productpic.url if product.productpic? %>
</div>
<div class="product-text">
<h2 class="product-title"> <%= product.name %></h2>
<h3 class="product-price">£<%= product.price %></h3>
</div>
<% end %>
<% end %>
</div>
你可以这样做 在您的控制器中,您可以编写此代码
def show
@category = Category.find_by_name(params[:name])
end
在您看来它会起作用
<div class="grid">
<% @category.products.each do |product|%>
// place your code what you want to display
<% end %>
</div>
希望对您有所帮助,如果您有任何疑虑,请告诉我。