1

私はショッピングカートアプリに取り組んでおり、注文モデルを持っています。carriertracking_numberおよびを含めるために、注文モデルに配送の詳細を追加しましたship_dateupdateshipping注文を更新した後に別のリダイレクトを行うために呼び出されるメソッドを作成しました。

私はレールに慣れていないので、保存後にレールで条件付きリダイレクトを行うことができるかどうか、またはupdateshippingメソッドにアクセスするためのカスタムルートを作成する必要があるかどうか(私が試したこと)、または正しい答えが新しいものを作成する必要があるかどうかはわかりません配送の詳細を保持するモデル。

メソッドを介してフォームの部分的な更新をリダイレクトしようとしましたupdateshippingが、送信ボタンが機能しません。送信ボタンにカーソルを合わせると、URL が表示されません。[送信]をクリックすると、フォームの一部がリロードされているように見えます。後ですべてを削除する@orderと、form_for正しく更新注文/更新メソッドに移動するため、問題が発生していると想定しform_forます (または、最初に注文モデルの一部です)。

<%= form_for(@order, :url => shipment_path, :html => { :method => "put" }) do |f| %>

  <%= render 'shared/error_messages', object: f.object %>

  <%= f.label :carrier %>
  <%= f.text_field :carrier %>

  <%= f.label :tracking_number, "Tracking #" %>
  <%= f.text_field :tracking_number %>

  <div class="form-actions">
    <%= f.submit "Save changes", class: "btn btn-warning" %>
  </div>
<% end %>

注文管理者

def updateshipping
  raise params.inspect  (code to update the order will come later)
end

レーキルート

shipment        /shipmentdetails/:id(.:format)         orders#shipment_details
shipment PUT    /shipmentdetails/:id(.:format)         orders#updateshipping

ルート.rb

match '/shipmentdetails/:id' => 'orders#shipment_details', :as => :shipment
match '/shipmentdetails/:id' => 'orders#updateshipping', :as => :shipment, via: :put

注文モデル

class Order < ActiveRecord::Base
  attr_accessible :name, :address, :carrier, :tracking_number, :ship_date
  has_many :line_items, dependent: :destroy
  has_one :user
  has_one :shop

  validates :name, :address, presence: true
end
4

3 に答える 3

1

これがうまくいった理由はわかりませんが、フォームのパーシャルにリンクするルートを変更しました。ルートを次のように変更しました。

match '/shipmentdetails/:id' => 'orders#shipment_details', :as => :shipment

に:

match '/shipmentdetails/:id/edit' => 'orders#shipment_details', :as => :edit_shipment

shipping_path の間で混乱していたのかもしれませんが、「put」メソッドを持つ form_for からのパスは、次のルートを使用することを知っている必要があると思いました。

match '/shipmentdetails/:id' => 'orders#updateshipping', :as => :shipment, via: :put

私の最初の試みからの form_for については

form_for(@order, :url => shipment_path, :html => { :method => "put" })

推奨どおりに機能するようです

form_for(@order, :url => shipment_path(@order), :html => { :method => "put" })

しかし、shipping_path だけでなく、shipping_path(@order) を使用する方が良い方法かどうかはわかりません。

于 2013-05-23T18:46:02.733 に答える
0

form_for 行を次のように変更します。

form_for(@order, :url => shipment_path(@order), :html => { :method => "put" })
于 2013-05-23T16:59:31.543 に答える
0

の代わりに:html => { :method => "put" }、試してください:method => "put"

于 2013-05-22T20:41:22.137 に答える