0

私はproducts_controllerと製品モデルという名前のコントローラーを作成しましたが、それをindex.html.erb and show.html.erb 呼び出すlocalhost:3000/productsとデータベースから詳細を取得します。同じページで、製品の詳細を明確に表示するためのリンクを提供しました。しかし、それはロードされていません。表示リンクをクリックすると、各製品の詳細を取得する必要があります。ただし、localhost:3000/products)、同じページに読み込まれます。localhost:3000/products の結果

Model Name  Brand Name  Price   Discount    Qty Available           
Nokia Lumia     Nokia   15000   5.0     25  Show    
Samsung galaxy Nexus    Samsung     45000   15.0    5   Show    
Sony Experia    Sony Ericsson   4500    1.0     10  Show    
Nikon D5100     Nikon   25500   10.0    100     Show    
Panasonic Lumix     Panasonic   25500   10.0    104     Show    
Olympus Granite     Olympus     24520   12.0    45  Show    

products_controller.rb

class ProductsController < ApplicationController
  def index
    @products = Product.select("model_name,brand_name, price, discount, qty_avaliable")
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @products }
    end
  end

  #render :text => params and return false

  def show
    @product = Product.find_by_sql("select model_name,brand_name, price, discount, qty_avaliable from products where prod_id='PR1'")
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @product }
    end
  end

end

product.rb

class Product < ActiveRecord::Base
  attr_accessible :prod_id, :model_name, :brand_name, :price, :discount, :qty_avaliable
end

index.html.erb

<p id="notice"><%= notice %></p>

<h1>Products  List</h1>

<table>
  <tr>
    <th>Model Name</th>
    <th>Brand Name</th>
    <th>Price</th>
    <th>Discount</th>
    <th>Qty Available</th>

    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @products.each do |product| %>
  <tr>
    <td><%= product.model_name %></td>
    <td><%= product.brand_name %></td>
    <td><%= product.price %></td>
    <td><%= product.discount %></td>
    <td><%= product.qty_avaliable %></td>
    <td><%= link_to 'Show', Product %></td>


  </tr>
<% end %>
</table>

show.html.erb

<p prod_id="notice"><%= notice %></p>

<p>
  <b>Model Name:</b>
  <%= @product.model_name %>
</p>

<p>
  <b>Brand Name:</b>
  <%= @product.brand_name %>
</p>

<p>
  <b>Price:</b>
  <%= @product.price %>
</p>

<p>
  <b>Discount:</b>
  <%= @product.discount %>
</p>

<p>
  <b>Quantity:</b>
  <%= @product.qty_avaliable %>
</p>
4

3 に答える 3

2

まず、モデルの ID を持っていないのはなぜですか? また、生の SQL を実行しているのはなぜですか?

そのはず:

class ProductsController < ApplicationController
  def index
    @products = Product.all
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @products }
    end
  end

  def show
    @product = Product.where(id: params[:id]).first
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @product }
    end
  end

end

そして、あなたの見解では、リンクが間違っています。反復で現在の製品のIDを渡す必要があります

<% @products.each do |product| %>
  <tr>
    <td><%= product.model_name %></td>
    <td><%= product.brand_name %></td>
    <td><%= product.price %></td>
    <td><%= product.discount %></td>
    <td><%= product.qty_avaliable %></td>
    <td><%= link_to('Show', product) %></td>
  </tr>
<% end %>

link_to は舞台裏でいくつかのメタプログラミングを行いますが、それは行うこととほとんど同じです

    <td><%= link_to('Show', product_path(id: product.id) %></td>
于 2012-12-14T09:52:53.477 に答える
0

in<%= link_to 'Show', product %>の代わりに使用する必要があるように私には思えます<%= link_to 'Show', Product %>index.html.erb

于 2012-12-14T09:50:42.200 に答える
0

ここ:

<td><%= link_to 'Show', Product %></td>

クラスであるproductではなく、ブロック変数であるを使用する必要があります。Product

于 2012-12-14T09:52:06.170 に答える