我在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
找到答案 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