0

製品を保存するアプリケーションがあります(ファイルから読み取り、htmlからのユーザー入力はありません)。問題は、製品には送信者がいるということです。送信者は、その製品に関心のある 1 人または複数の人です。私の製品のインデックス ページには、「表示/編集/破棄」という 2 つの基本アクションがあります。特定の製品に送信者を追加する「送信者の追加」アクションをもう 1 つ追加したいと思います。私はその背後にあるロジックを理解しています.Railsは初めてなので、問題は構文です.

私の製品モデル:

class Product < ActiveRecord::Base
  attr_accessible :name, :price

   #relationships !
   has_many :senders,  dependent: :destroy #also destroys the senders when product deleted!
end

私の送信者モデル

class Sender < ActiveRecord::Base
  attr_accessible :application_id, :email, :name

  belongs_to :product
end

また、関係をレールに示すためにこの移行があります

class CreateSenders < ActiveRecord::Migration 
  def change
    create_table :senders do |t|
      t.integer :product_id
      t.string :name
      t.text :email 

      t.timestamps
    end
    add_index :senders, [:product_id, :created_at]
  end 
end

現在、「送信者の追加」リンクの背後に「あり」、「現在の」製品の ID を取得するカスタム ルートを作成することを考えています。次に、このような方法で送信者を作成します

product.sender.create/add(user_id??)

ヘルプ/ガイダンスをお願いします。

4

1 に答える 1

0

安らかなルーティングを使用していますか?もしそうなら、ネストされたリソースの使用を検討しましたか? 安らかなルーティングを使用していない場合は、ここで探しているものとまったく同じであるため、必ず確認してください。以下はすべて、Rails のデフォルトであり、ユース ケースに完全に適合するので、Restful ルーティング メソッドを使用していることを前提としています。

Rails ルーティングのネストされたリソース オプションを使用すると、既存のルート セットの下に一連の安静なルートを追加できます。新しいルート セットは、親リソースに属するリソースに関連します。

この場合、送信者はネストされたリソースになり、ルートでこれを設定することにより、別の送信者コントローラーを作成して (製品コントローラーと同様に)、作成/削除などを管理できます。単純な CRUD コントローラーとの唯一の違いは、senders コントローラーでは、sender だけでなく製品もロードする必要がある場合があることです (製品の検証を行っている場合など、製品にアクセスする必要がある場合)。製品はルートの ID からロードできます (これはすべて上記のリンクで説明されています)。

いくつかの安静なルート (作成/削除、インデックス/表示ではない) のみが必要な場合は、それも制御できます (詳細はこちら):

resources :senders, :only => [:new, :create, :destroy]
于 2012-08-24T16:47:25.610 に答える