1

シンプルなショッピングカートを作っています。これはルートです。データは次のとおりです。

match '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ブロック ( は variable ) に移動すると、アプリは URL /orders/9@errにレンダリングされます。しかし、以前の URL であるkosik/osobni-udajeに移動する必要があります。

また、ログを確認しようとしましたが、次のエラーメッセージしかありません。

ActionView::MissingTemplate (Missing template orders/update, application/update with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee, :haml]}.

私が間違っていることは何ですか?

ありがとうございました

4

4 に答える 4

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」エンドの位置を変更するだけです

于 2012-07-29T16:57:29.827 に答える
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
于 2012-07-29T19:06:44.040 に答える
0

わかりましたので、次のように解決しました:

if fname.nil? || lname.nil?
  @err = ''
  @err += '...'
  @err += '...'

  flash[:error] = @err
  redirect_to :back
...

そして、ビューではちょうど

- if flash[:error]
  %p #{flash[:error]}

これはおそらく最善の解決策ではありませんが、間違いなく機能しています...

于 2012-07-29T17:20:25.310 に答える
0

あなたが使用することができます:

render 'home/cart_personal_data'

URI"/kosik/osobni-udaje"を指し示すルートはありますが、URI は実際にはアクションではありません。renderコントローラーとアクション、またはファイルに関して何かが必要です。詳細については、Rails ガイドを参照してください。

お役に立てれば。

于 2012-07-29T17:28:00.717 に答える