Rails无意中将默认值插入数据库

时间:2014-11-30 04:10:49

标签: ruby-on-rails ruby database sqlite controller

我在rails中创建了两个控制器动作。尝试以可视方式表示数据库中的信息,以及如果在数据库中找不到该信息则创建该信息的信息。

def show
  if Stock.not_exists?(params[:symbol])
    create
  end
$stock = Stock.find(params[:symbol])
@input = Stock.getoverview(params)
if @input === 404
  not_found
else
  @data = # Data is pulled from API
  respond_to do |format|
    format.html # show.html.erb
    format.json { render json: @stock }
  end
end
end

def create
  stock = Stock.new
  stock.symbol = params[:symbol]
  stock.name = # Data is pulled from API
  stock_saved = stock.save
  if stock_saved
    render json: stock, status: :created
  else
    render json: stock.errors, status: :unprocessable_entity
  end
end

当"显示"控制器操作由HTML请求触发,控制器尝试创建包含数据的数据库条目。 不幸的是,控制器在尝试保存创建的" Stock"时会发出以下SQL查询。模型:

  SQL (2.0ms)  INSERT INTO "stocks" DEFAULT VALUES

当分析数据库时,所有列看起来基本上都是空的,当它们应该包含在" create"中处理的数据时。控制器动作。

有什么方法可以解决这个问题吗?

我的数据库架构和" Stock"模型可以在https://gist.github.com/psgs/e79e9efac05c235678ed

找到

1 个答案:

答案 0 :(得分:1)

您不应该将create称为方法。将create的相关部分提取到外部方法,并使用该方法:

def show
  if Stock.not_exists?(params[:symbol])
    do_create(params[:symbol])
  end
  $stock = Stock.find(params[:symbol])
  @input = Stock.getoverview(params)
  if @input === 404
    not_found
  else
    @data = # Data is pulled from API
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @stock }
    end
  end
end

def do_create(symbol)
  stock = Stock.new
  stock.symbol = symbol
  stock.name = # Data is pulled from API
  stock.save
end

def create
  stock_saved = do_create(params[:symbol])
  if stock_saved
    render json: stock, status: :created
  else
    render json: stock.errors, status: :unprocessable_entity
  end
end