0

私はプロジェクトに取り組んでおり、レールに非常に慣れていません。

私は正確に何が間違っているのか分かりません。このエラーが発生します。

製品の NoMethodError#index

初期化されていない定数 ProductsController::Offer

基本的に、実装しようとしている機能があります。

私の製品テーブルには、予約価格と呼ばれる列があります。ユーザーに製品ページのフォームに番号を送信してもらい、予約価格と比較して検証します。受け入れられた場合はカートに追加されます。そうでない場合は、より高いオファーを入力してください、

問題は、モデルとコントローラーを連携して動作させる方法を理解できないように見えることです。

私は一週間ずっとこれにいましたが、まだ手がかりがありません。

NilClass:Class の未定義のメソッド「model_name」というエラーが発生しているビューページに関して、誰かが私のコードを見て何が欠けているかを確認できるかどうか疑問に思いました。フォームに正しいモデルを入力したと確信していました。それを機能させることができます。残りはすばやく完了できますが、何が欠けているのかわかりません。

offer controller.rb クラス OffersController < ApplicationController

attr_accessible :product、:offer、:reserve_price

def new @offer = Offer.new end

end

model.rbを提供

   class Offer < ActiveRecord::Base

属している商品: 商品がたくさんあります: 予約価格

attr_accessible :product、:offer、:reserve_price

validates_presence_of :offer 検証 :ensure_meets_reserve_price

private def ensure_meets_reserve_price if amount < self.product.reserve_price errors.add(:amount, "予約価格を満たしていません") end end

private def reserve_price product.reserve_price end

def your_offer @your_offer = Offer.new

終わり

def new @offer = Offer.new = :your_offer end

 end

製品インデックス ビュー ファイル

   class ProductsController < ApplicationController

before_filter :authenticate, :except => [:index, :show]

# /products を取得 # /products.xml を取得

def index @offer = Offer.new

@products = Product.search(params[:search_query])

respond_to do |format|
  format.html # index.html.erb
  format.xml  { render :xml => @products }
end

終わり

# GET /products/1 # GET /products/1.xml def show

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


respond_to do |format|
  format.html # show.html.erb
  format.xml  { render :xml => @product }
end

終わり

# GET /products/new # GET /products/new.xml def new @product = Product.new

respond_to do |format|
  format.html # new.html.erb
  format.xml  { render :xml => @product }
end

終わり

# GET /products/1/edit def edit @product = Product.find(params[:id]) end

# POST /products # POST /products.xml def create @product = current_user.products.new(params[:product])

respond_to do |format|
  if @product.save
    format.html { redirect_to(@product, :notice => 'Product was successfully created.') }
    format.xml  { render :xml => @product, :status => :created, :location => @product }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
  end
end

終わり

# PUT /products/1 # PUT /products/1.xml def update @product = Product.find(params[:id])

respond_to do |format|
  if @product.update_attributes(params[:product])
    format.html { redirect_to(@product, :notice => 'Product was successfully updated.') }
    format.xml  { head :ok }
  else
    format.html { render :action => "edit" }
    format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
  end
end

終わり

# DELETE /products/1 # DELETE /products/1.xml def destroy @product = Product.find(params[:id]) @product.destroy

respond_to do |format|
  format.html { redirect_to(products_url) }
  format.xml  { head :ok }
end

終了 終了

製品 controller.rb

class ProductsController < ApplicationController
  before_filter :authenticate, :except => [:index, :show]

  # GET /products
  # GET /products.xml
  def index
    @products = Product.search(params[:search_query])

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @products }
    end
  end

  # GET /products/1
  # GET /products/1.xml
  def show
    @product = Product.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @product }
    end
  end

  # GET /products/new
  # GET /products/new.xml
  def new
    @product = Product.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @product }
    end
  end

  # GET /products/1/edit
  def edit
    @product = Product.find(params[:id])
  end

  # POST /products
  # POST /products.xml
  def create
    @product = current_user.products.new(params[:product])

    respond_to do |format|
      if @product.save
        format.html { redirect_to(@product, :notice => 'Product was successfully created.') }
        format.xml  { render :xml => @product, :status => :created, :location => @product }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
      end
    end
  end
 # PUT /products/1
 # PUT /products/1.xml
 def update
   @product = Product.find(params[:id])

   respond_to do |format|
     if @product.update_attributes(params[:product])
       format.html { redirect_to(@product, :notice => 'Product was successfully updated.') }
       format.xml  { head :ok }
     else
       format.html { render :action => "edit" }
       format.xml  { render :xml => @product.errors, :status => :unprocessable_entity }
     end
   end
 end

 # DELETE /products/1
 # DELETE /products/1.xml
 def destroy
   @product = Product.find(params[:id])
   @product.destroy

   respond_to do |format|
     format.html { redirect_to(products_url) }
     format.xml  { head :ok }
   end
 end
       end

助けはありますか?

多くのアプリケーションがこれにしばらく取り組んでいましたが、それを理解していません!

4

1 に答える 1

0

あなたの質問を正しく理解している場合:

  • 製品へのアクセス時にエラーが表示される#show
  • product#show ページにオファーフォームを含めたい

その場合、次のように ProductsController の show アクションで @offer 変数を初期化する必要があります。

@offer = Offer.new

添加

次へ 問題: ProductsController::Offer が不明です。Offer モデルがあるため、これは不明です。Offer フォームを show アクションに含めてみたところ、Offer の新しいインスタンスでフィールドを初期化することを除けば、問題なく表示されました。(むしろ量?)とにかく、あなたのコード スニペットからは、Offer モデルがコントローラーで利用できない理由がわかりません。完全なソースを提供できますか?

私は最初にオファーであなたの奇妙なプライベート メソッドを疑いました

 def your_offer
     @your_offer = Offer.new

   end

def new
  @offer = Offer.new = :your_offer
end

が原因ですが、それらを含めて、フォームは正常にレンダリングされます。しかし、私は彼らが何をすることになっているのですか?

于 2012-07-25T22:59:28.683 に答える