如果不存在,我想创建一条新记录。否则,重定向到自动编辑页面。
如果记录存在(例如:@sale
不是nil
)。但是,我收到了错误消息:
app / views / sales / _form.html.erb第1行引发:
表单中的第一个参数不能包含nil或为空
请出示我错误的地方。
sales_controller.rb
def new
@sale = Sale.find_on_today
if @sale.nil?
@sale = Sale.new
else
redirect_to edit_sale_path(@sale)
end
end
def edit
end
# POST /sales
def create
Kpi.transaction do
@sale = Sale.new(sale_params)
@sale.user_id = current_user.id
respond_to do |format|
if @sale.save
format.html { redirect_to sales_path, notice: 'Sale was successfully created.' }
else
format.html { render :new }
end
end
end
end
# PATCH/PUT /sales/1
def update
respond_to do |format|
if @sale.update(sale_params)
format.html { redirect_to sales_path, notice: 'Sale was successfully updated.' }
else
format.html { render :edit }
end
end
end
private
def sale_params
params.require(:sale).permit(:sale_money, :no_of_items)
end
_form.html.erb
<%= form_for @sale do |f| %>
<label for="sale_money"><%= t('.sale_money_label')%></label>
<%= f.text_field :sale_money, class: "form-control" %>
<label for="no_of_items"><%= t('.no_of_items_label')%></label>
<%= f.text_field :sale_amount, class: "form-control" %>
<%= f.submit t('.btn_submit'), class: 'btn btn-primary' %>
<% end %>
更新:根据fylooi的回答,我忘了重定向是一个新请求,因此@sale
是nil
。我在控制器中更改方法new
,edit
和update
,它正在运行
sales_controller.rb
def new
@sale = Sale.find_on_today
if @sale.nil?
@sale = Sale.new
else
redirect_to edit_sale_path(@sale.id)
end
end
def edit
@sale = Sale.find(params[:id])
end
def update
@sale = Sale.find(params[:id])
respond_to do |format|
if @sale.update(kpi_params)
format.html { redirect_to kpis_path, notice: 'Sale was successfully updated.' }
else
format.html { render :edit }
end
end
end
edit.html.erb
<%= render partial: 'form' %>
答案 0 :(得分:1)
redirect
是对Rails的新请求。您需要在@sale
操作中再次设置edit
,因为update
不会保留edit
。
或者,如果更新失败,您可以直接从update
呈现update
视图。这将保留somelist
的实例变量。