1

Railsを初めて使用するため、エラーを正確に特定することはできません。URLからprod_idのみを指定してデータを取得するメソッドを作成しています。URLをlocalhost:3000 / getproducts / PR1.josnとして指定し、json形式でデータを取得します。しかし、それは次のようなエラーを示しています

ActiveRecord::RecordNotFound in GetproductsController#show

Couldn't find Product without an ID

Rails.root: /root/Railsapps/Shopping
Application Trace | Framework Trace | Full Trace

app/controllers/getproducts_controller.rb:12:in `show'

ここで私はコントローラーであるgetproducts.rbを与えています

class GetproductsController < 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.find(params[:prod_id]) 
    respond_to do|format|
      format.html  {render show.html.erb}
       format.xml  #{ render :xml => @product }
      format.json {render json:@product}
    end
      end

end

私のモデルはproduct.rbです

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

私のshow.html.erb

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

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

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

2 に答える 2

1

また、そのURLに対して使用しているルートをconfig /routes.rbに記述できますか?

モデルでは、主キーが期待どおりに「id」ではないことをレールに伝える必要があります。

class Product < ActiveRecord::Base
   set_primary_key :prod_id

   attr_accessible :model_name, :brand_name, :prod_id
end

その後、あなたはすることができます

Product.find(params[:id])

そしてそれは動作するはずです:)

于 2012-12-15T05:31:08.300 に答える
0

問題は、Railsが指定されたパラメーターを取得し、それがと呼ばれていると想定している可能性が高いと考えています。idそのため、要求したときにそのprod_idようなパラメーターはありません。これはshowアクションのデフォルトです。パラメーターの名前は。と見なされますid。次に、params [:prod_id]で検索しようとします。これはnilです。これは、params(おそらく)が単なる。であるため{:id => 'PR1'}です。

これは、呼び出しparams[:id]の代わりに渡すか、routes.rbファイルを変更することで修正できます。params[:prod_id]Product.find_by

resources :getproducts, :except => [:show]

get 'getproducts/:prod_id' => 'getproducts#show'

まず、このコントローラーのデフォルトの表示ルートを使用しないようにRailsに指示します(これは:exceptオプションです)。次に、パラメータの名前を指定して、独自のルートを定義します。このように、を呼び出すとgetproducts/PR1、「PR1」はとして渡されparams[:prod_id]ます。Railsは一致する最初のルートを使用するため、最初にデフォルトを除外する必要があります。デフォルトがまだ存在する限り、それはresources呼び出しによって定義されます。

于 2012-12-15T05:21:05.697 に答える