我正在建造简单的购物车。 这是路线,其中是数据:
匹配'kosik / osobni-udaje'=> 'home#cart_personal_data',:as => :cart_personal_data
此部分形式为订单(= form_for @order do |f|
) - 此表单转到:
def update
@order = Order.find(params[:id])
fname = Order.check_attribute(params[:order][:first_name], 3, 40)
lname = Order.check_attribute(params[:order][:last_name], 3, 40)
if fname.nil? || lname.nil?
@err = ''
@err += 'Name is required<br />'
@err += 'Surname is required<br />'
render action: "/kosik/osobni-udaje"
else
respond_to do |format|
if @order.update_attributes(params[:order])
format.html { redirect_to cart_summary_path }
format.json { head :no_content }
else
format.html { render action: "/kosik/osobni-udaje" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
end
如果应用转到第一个 if 块(变量@err
),那么该应用会呈现为网址 / orders / 9 。
但我需要转到上一个网址 - kosik / osobni-udaje 。
另外,我试图检查日志,但只有以下错误消息:
ActionView::MissingTemplate (Missing template orders/update, application/update with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml]}.
我做错了什么?
谢谢
答案 0 :(得分:0)
尝试这样做:
def update
@order = Order.find(params[:id])
fname = Order.check_attribute(params[:order][:first_name], 3, 40)
lname = Order.check_attribute(params[:order][:last_name], 3, 40)
if fname.nil? || lname.nil?
@err = ''
@err += 'Name is required<br />'
@err += 'Surname is required<br />'
render action: "/kosik/osobni-udaje"
else
if @order.update_attributes(params[:order])
respond_to do |format|
format.html { redirect_to cart_summary_path }
format.json { head :no_content }
end
else
respond_to do |format|
format.html { render action: "/kosik/osobni-udaje" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end
只需更改“respond_to”的位置 端
答案 1 :(得分:0)
好的,所以我这样解决了:
if fname.nil? || lname.nil?
@err = ''
@err += '...'
@err += '...'
flash[:error] = @err
redirect_to :back
...
并且在视图中
- if flash[:error]
%p #{flash[:error]}
这可能不是最好的解决方案,但它确实有效......
答案 2 :(得分:0)
你可以使用:
render 'home/cart_personal_data'
URI "/kosik/osobni-udaje"
实际上并不是一个动作,即使有指向它的路径。 render
需要控制器和操作或文件。有关详细信息,请参阅rails guide。
希望这有帮助。
答案 3 :(得分:0)
我认为你的代码错了。
您应该在自定义验证程序中进行验证,例如指南中的示例:http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations。之后,你可以这样做:
def update
@order = Order.find(params[:id])
if @order.update_attributes(params[:order])
respond_to do |format|
format.html { redirect_to cart_summary_path }
format.json { head :no_content }
end
else
respond_to do |format|
format.html { render action: "/kosik/osobni-udaje" }
format.json { render json: @order.errors, status: :unprocessable_entity }
end
end
end