首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError in Products#create

NoMethodError in Products#create
EN

Stack Overflow用户
提问于 2013-11-03 17:21:51
回答 2查看 267关注 0票数 0

我对编程完全陌生,而且我遇到了麻烦。大约10天前,我开始了由Richard主持的关于ureddit.com的UT课程。到目前为止一切都进行得很顺利,但我第五周就有麻烦了。如果我没有使用正确的术语,你得原谅我,因为它已经被采纳了很多。

controllers是我目前正在学习的教程。

我已经完成了第2步,我已经将app/views/products/new.html.erb中的文本替换为以下内容:

代码语言:javascript
复制
<%= 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 %>

但是,当我尝试在教程中添加一个新产品时,我得到的拒绝是:

代码语言:javascript
复制
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中,我有以下内容:

代码语言:javascript
复制
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

抱歉,如果这是长篇大论。我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-03 17:24:55

应该是<%= @products.name %>

票数 0
EN

Stack Overflow用户

发布于 2013-11-03 19:06:34

/app/view/products/create.html.erb

您不想使用create.html.erb。

代码语言:javascript
复制
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,请使用:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19755702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档