<div class="hide-for-small panel">
<h3>Sidebar</h3>
<h5 class="subheader">Feature Product</h5>
<% Product.random do | product | %>
<%= image_tag(Product.image_url) %>
<h5><%= link_to Product.title, product %></h5>
<p><%= button_to 'Add to Cart', line_items_path(:product_id => product) %></p>
<% end %>
</div>
def Product.random
self.limit(1).offset(rand(self.count)).first
end
尝试使用Postgres提取随机产品。查询在控制台中出现,但我在索引中没有查看结果。
任何解决方案或不同的方法来实现这一目标?
答案 0 :(得分:1)
您的image_tag和链接中的产品看起来不正确地引用模型而不是随机模型。
尝试更改这些:
<%= image_tag(product.image_url) %>
<h5><%= link_to product.title, product %></h5>
答案 1 :(得分:1)
您应该在控制器中生成随机产品,并在视图中访问实例变量。
像: 控制器的索引动作:
@random_product = Product.random
视图:
<%= image_tag(@random_product.image_url) %>
等。 您永远不应该直接从视图访问模型。
答案 2 :(得分:1)
首先,您将类方法与实例方法混合在一起。尝试制作视图:
<div class="hide-for-small panel">
<h3>Sidebar</h3>
<h5 class="subheader">Feature Product</h5>
<%= image_tag(@product.image_url) %>
<h5><%= link_to @product.title, @product %></h5>
<p><%= button_to 'Add to Cart', line_items_path(:product_id => @product.id) %></p>
</div>
类方法(Product.random
)在您不需要特定方法时定义。如果是特定产品,请product.title
。
其次,在您的控制器中执行此操作,您需要将@product
实例变量定义为@product = Product.random
。然后你可以在视图中使用它。
第三,获取随机记录可以简化为:
Product.order("RANDOM()").first
所以你的模型代码如下:
def self.random
Product.order("RANDOM()").first
end
答案 3 :(得分:1)
整个问题是你将一个块传递给一个没有阻塞的方法,所以它被默默地忽略,从未被执行过,所以其他问题你没有来起来。
您的所有代码都位于您通过Product.random
传递给Product.random do |product|
的块中。这应该是product = Product.random
,没有do/end
阻止。
完成此操作后,当您使用Product.title
代替product.title
等时,您会看到更多错误。