2

出荷モデルがあるアプリケーションがあります。出荷を作成し、表ベースのレイアウトで出荷を表示できるビューを作成しました。すべてのアクションは ajax を介して行われるため、すべてが index.html.erb にあります。

出荷が作成されると、ステータスはデフォルトで「OPEN」になります。後で船荷証券が印刷されると、ステータスは「PRINTED」に変わります。

私の目標は、オペレーターが別のフォームを使用して船荷証券を印刷できるように、開いている出荷のみを一覧表示する別のビューを作成することです。私の質問は、Rails が 1 つのモデルの複数のフォームとビューのレンダリングをどのように処理するかです。印刷に関連するアクション/ビューを処理するために別のコントローラー/ビューを使用する必要がありますか、それとも ex に 2 つのモデルを使用する必要があります。出荷と OpenShipment? この問題を説明するドキュメントを見つけるのに苦労しています。

以下に、このモデルのスキーマと現在のビューのディレクトリ構造を示します。これが問題の説明に役立つことを願っています。

Shipment Model
  t.string    :item_code
  t.string    :status
  t.string    :bill_of_lading
  t.integer   :qty_shipped
  t.datetime  :ship_date
  t.datetime  :delivery_date

ディレクトリ構造の表示

views
   shipments
      index.html.erb
      _shipment.html.erb
      _shipment_table.html.erb
      _form.html.erb
      _edit_form.html.erb
      create.js.coffee
      edit.js.coffee
      update.js.coffee
      destroy.js.coffee     
4

2 に答える 2

1

ご覧のとおり、同じものを 2 回表示することになります。これは 2 つの方法で解決できます。パラメーターを追加して同じコントローラー アクションを維持するか、新しいコントローラー アクションを追加します (これにより、よりクリーンな URL が作成される可能性があります -- 好みによって異なります)。

まず、scopeonを定義しますShipment:

class Shipment

  scope :open, lambda { where(:status => 'open')

end

これにより、次のような記述が可能になります。

Shipment.open

これにより、すべてのオープン出荷が表示されます。

したがって、次のように新しいコントローラーアクションを定義できます

def open_shipments
  @shipments = Shipment.open
  render :index
end

これにより、開いている出荷が取得され、インデックスと同じビューが表示されます。

さらにきれいにするために、状態を URL のパラメーターにすることができます。あなたのconfig/routes.rb書き込みで

get 'shipments/status/:status', :as => 'shipments#index'

index次に、次のようにアクションを編集する必要があります。

def index
  if params[:status]
    @shipments = Shipment.where(:status => params[:status])
  else
    @shipments = Shipment.all
  end
end

shipments/status/openそして、開いている出荷を提供するURL にアクセスするだけで、同様shipments/status/printedに印刷されたすべての出荷を提供します。

ただし、URLshipments?status=openからは同じ結果が得られます (ルートを変更する必要はありません)。あなたの味覚次第です。

お役に立てれば。

于 2012-06-20T10:49:02.223 に答える
1

コントローラに open_shipments という新しいアクションを作成し、open_shipments.html.erb という新しいビュー ファイルを作成します。新しいルートをルート テーブルに追加し、いくつかのビューでリンクを作成して新しいルートをリンクします。

コントローラー アクションで、モデル オブジェクトにアクセスしてインスタンス変数にアクセスし、それらのインスタンス変数からビューに表示します。

幸運を!

于 2012-06-20T04:41:37.757 に答える