0

私はプログラミングがまったく初めてで、問題を抱えています。約 10 日前、Richard Schneeman が主催する ureddit.com で UT-Rails コースを開始しました。これまでのところ順調に進んでいますが、私は 5 週目で問題を抱えています。理解することがたくさんあったので、適切な用語を使用していない場合は、申し訳ありません.

https://github.com/zkay/move_logic_to_controllersは、私が現在フォローしているチュートリアルです。

私はステップ 2 までです。 のテキストをapp/views/products/new.html.erb次のように置き換えました。

<%= form_for(@product) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.text_field :price %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

ただし、チュートリアルに従って新しい製品を追加しようとすると、返される拒否は次のとおりです。

NoMethodError in Products#create

Showing C:/Sites/move_logic_to_controllers/app/views/products/create.html.erb where line #3 raised:

undefined method `name' for nil:NilClass
Extracted source (around line #3):

1: <h2>Product Created Successfully<h2>
2: 
3: <%= @product.name %> added to the website, it costs: $<%= @product.price %>
Rails.root: C:/Sites/move_logic_to_controllers

を削除してページ.name.price呼び出すと、ページは機能しますが、送信したデータは表示されません。

私はapp/controllers/product_controller.rb次のものを持っています:

class ProductsController < ApplicationController
  def index
    @products = Product.includes(:user).all
  end
def new
  @product = Product.new
end

  respond_to do |format|
    if @product.save
      format.html { render :action => "create" }
      format.json { render :json => @product }
    else
      format.html { render :action => "new" }
      format.json { render :json => @product.errors, :status => :unprocessable_entity }
    end
  end
end

長くなってしまい申し訳ありません。助けていただければ幸いです。

4

2 に答える 2

0

/app/views/products/create.html.erb

create.html.erb を使用したくありません。

class ProductsController < ApplicationController
  def index
    @products = Product.includes(:user).all
  end

  def new
    @product = Product.new
  end

  def create
    @product = Product.new(params[:product])

    if @product.save
      redirect_to products_path, notice: "You added product"
    else
      flash[:error] = "Something wrong!"
      render :new
    end
  end
end

Rails 4 を使用する場合:

def create
  @product = Product.new(product_params)

  if @product.save
    redirect_to products_path, notice: "You added product"
  else
    flash[:error] = "Something wrong!"
    render :new
  end
end

private

def product_params
  params.require(:product).permit(:name, :price)
end
于 2013-11-03T19:06:34.510 に答える
0

そのはず<%= @products.name %>

于 2013-11-03T17:24:55.207 に答える