カテゴリと製品モデルがあります。製品モデルはカテゴリに属しています。現在、ユーザーに新しい製品フォームを表示させ、ユーザーがリンクをクリックしたカテゴリとしてカテゴリIDを設定するカテゴリの表示ビューにリンクがあります。レールにハンドルパラメータがありません
ユーザーはカテゴリを選択します>カテゴリの[ユーザーが新しい製品をクリックします]カテゴリの[表示]> [製品フォーム]が開き、以前のカテゴリとしてカテゴリIDが設定されます。
問題は、ユーザーが/ products/newに行くと、カテゴリIDが見つかりません(カテゴリがアドレス要求と共に送信されていないことを確認しているため)。
ユーザーが単に/ products/newアドレスを入力してフォームにアクセスしようとするのを防ぐための方法はありますか?カテゴリページのリンクをクリックせずに新しい製品を作成しようとすると、ユーザーは自宅にリダイレクトされます。
(この質問に関連する)製品コントローラのための私のコード:
def new
@product = @category.products.new
end
def set_category
@category = Category.find_by(id: params[:category_id]) || Category.find(product_params[:category_id])
rescue ActiveRecord::RecordNotFound
end
private
def product_params
params.require(:product).permit(:category_id, :title, :description, :image_url, :price)
end
カテゴリショーのページに新製品へのリンク:
%p= link_to t('.add'), new_product_path(category_id: @category)
メソッド例外ポイントへ:
def product_params
params.require(:product).permit(
:category_id, :title, :description, :image_url, :price)
end
ご迷惑をおかけして申し訳ございませんが、ご迷惑をおかけして申し訳ございません。
あなたのルートはどのように見えますか?おそらく '/ products/new'ルートが存在しないようにネストされたリソースが必要になるかもしれません。また、 '@ category'には' find_by'、 'find'、' rescue'は必要ありません。あなたのルートが適切に設定され、 'set_category'が適切なコントローラメソッドにバインドされている場合、' Category.find'呼び出しと通常のRails 'RecordNotFound'処理だけで十分です。 –
現在私は持っています: 'resources:categories' ' resources:products' 別々の行にあります。 do節とカテゴリの下にネストされた製品を設定することを意味すると思いますか? – Isengrim