3

1つのカテゴリを表示するショーアクションがあります。しかし、そこからリンクを介して新製品を作成したいと思います。ポイントは、link_toを介してカテゴリIDと名前を渡したということです。

それはうまくいき、製品/新しいアクションを開きます。そして、ブラウジングバーにはこのようなリンクがありますhttp://mysite/products/new?id=43&name=Skeleji

しかし、新製品に関する情報を入力するフォームでそれらのIDと名前を利用できるようにするにはどうすればよいですか?この後、[作成]をクリックすると、category_idなどのこれらの値が他の情報とともにdbに保存されるようにします。

製品とカテゴリーの間で、私は関係を築きました。

これまでのところ、私のコードは次のようになっています。

私のカテゴリ/ショーアクションコードは次のようになります。

<%= link_to "Add Product", {:controller => "products", :action => "new", :id => @category.id, :name => @category.name }%>

製品コントローラー、新しいアクションは次のようになります。

def new
@product = Product.new
@product.category_id = @category.id
end

[作成]をクリックするとプロジェクトが作成されますが、category_idはありません。どこに問題があるのでしょうか?たぶん、新しいアクションの下にあるコードは、実際には作成アクションの下にあるはずです。約1年前、なんとかそういうことができましたが、そのプロジェクトが見つかりません。:(

4

2 に答える 2

5

newアクションで値を設定できるはずです。

def new
  @product = Product.new
  @product.category_id = params[:id]
  @product.name = params[:name]
end

その後、それらはあなたのフォームにそのように表示されます。

idただし、これはリソースフルルーティングのデフォルトのパラメーター名であるため、パラメーターを呼び出すことはお勧めできません。params[:id]通常、ProductsControllerは常にProductオブジェクトを参照する必要があります。たまたま、new通常の使用ではパラメータを受け取らないアクションで使用しているidので、問題が発生することはないと思いますが、あまり意味的ではありません。

Productネストされた属性を受け入れるようにすると、次のCategoryように簡単に実行できると思います。

@product = Product.new(params[:product])

次のようにパラメータを構造化した場合::product => { :name => "whatever", :category_attributes => { :id => 1 } }ただし、ニーズによってはやり過ぎかもしれません。

于 2013-03-26T13:37:24.793 に答える
2

やってみました@product.category_id = params[:id]

通常?、URL内のすべてのものがparams変数に含まれています。

于 2013-03-26T13:37:30.850 に答える