在Ransack教程中,app / views / products / index.html.erb

时间:2014-09-13 05:58:31

标签: ruby-on-rails ransack

我想通过具备该功能进一步提高Ransack tutorial 单击时显示产品的其他信息。

app/views/products/index.html.erb

...
<% @products.each do |product| %>
    <tr>
        <td><%= link_to(product.name, product) %></td>
        <td><%= product.released_on.strftime("%B %e, %Y") %></td>
        <td><%= number_to_currency(product.price) %></td>
    </tr>
<% end %>

网络浏览器显示:

Product Name         Release Date    Price

Settlers of Catan    June 20, 2014   $34.95

Red Shirt            August 2, 2014  $12.49
...

可以选择产品名称下的每个项目 假设每个产品除了产品名称,发布日期和价格之外还有其他描述,我想通过更改来显示它们

<td><%= link_to(product.name, product) %></td>

<td><%= link_to(product.name, product_path(product)) %></td>

并在 show.html.erb

中添加类似内容
 <p>
    Manufacturer:
    <%= @product.manufacturer %>
 </p>
 <p>
    Description:
    <%= @product.description %>
 </p>
 ...

products_controller.rb

...
def show
    @search = Product.search(params[:q])
    @products = @search.result
end
...

这样做会产生错误。获得预期结果的正确方法是什么? 希望这个问题也有益于那些不熟悉ransack gem的人。

2 个答案:

答案 0 :(得分:0)

你的节目动作是错误的。 #show动作应返回单个对象。这里不推荐使用Ransack。

<Sandfox_RemovePaypalExpressReviewStep before="Mage_Paypal">Sandfox_RemovePaypalExpressReviewStep</Sandfox_RemovePaypalExpressReviewStep>

或者如果你想使用ransack,那么

def show
  @product = Product.find(params[:id])
end

答案 1 :(得分:0)

您的Products_controller应如下所示。

def index     @search = Product.search(params [:q])     @products = @ search.result 端

def show     @products = Product.find(params [:id]) 端