0

Makes モデルがあります。

class Make < ActiveRecord::Base
  attr_accessible :name
  has_many :models, dependent: :destroy
  has_many :trims, :through => :models
end

およびモデル モデル:

class Model < ActiveRecord::Base
  attr_accessible :name, :year, :make_id, :trim_id
  belongs_to :make
  has_many :trims
  validates :make_id, presence: true  
end

大量割り当ての脆弱性を少し無視しますが、次のようなことを達成するにはどうすればよいですか: Make が /makes/new を介して作成され、makes/1 に返されると、その Make を使用してモデルを作成するためのリンクを含むページが表示されます。

これを行うために別のコントローラーを定義してmake_idフィールドを事前入力できることは知っていますが、これは正しい方法ですか? モデルを作成するための私のルートは/models/new. そのフォームに事前入力し、事前入力されていないかのように動作させる方法はありますか?

4

1 に答える 1

1

これを行う確実な方法の 1 つは、model/new/:make_id への動的ルートを作成することです。

make#show ページの「その Make を使用してモデルを作成するためのリンク」で、新しいルートを使用するように設定します。

次に、モデル コントローラーの新しいアクションで、それを独自のインスタンス変数に割り当てます。

@make_id = params[:make_id]

model#new のビューでは、フォームの make text_field (text_field であると仮定) にその変数を設定できます。

<%= f.text_field :make, :value => @make_id %>

もっと精巧にしたい場合は、ビューで @make_id を使用してテキストフィールドを非表示にし、@make.present? の場合に非表示の入力を設定できます。誰でも URL をいじってそのページをいじることができるので、渡された make_id が有効であることを検証することをお勧めします。

于 2012-04-25T01:48:49.423 に答える