0

ユーザーとキャビネットのモデルがあります

class User < ActiveRecord::Base

  has_one :cabinet

  after_create :create_cabinet

  // Omitted code

  def create_cabinet
    Cabinet.create(user_id: id)
  end
end

-

class Cabinet < ActiveRecord::Base

  has_many :cabinet_ingredients, :dependent => :destroy
  has_many :ingredients, through: :cabinet_ingredients
  belongs_to :user

  attr_accessible :user_id, :cabinet_ingredients_attributes

  accepts_nested_attributes_for :cabinet_ingredients

end

-

Mixology::Application.routes.draw do

  // Omitted code
  resource  :cabinet

end

ユーザーキャビネットに移動してcabinet.1として戻るたびにルートを取得し続けます。その後、cabinet_ingredientsのいずれかにアクセスしようとすると、cabinet_ingredient.5(cabinet_ingredientのID)がカントであるというエラーが表示されます。見つけられた...

なぜ私がこれを手に入れているのかわからない..私のrake routes返品:

    cabinet     POST   /cabinet(.:format)                 cabinets#create
    new_cabinet GET    /cabinet/new(.:format)             cabinets#new
   edit_cabinet GET    /cabinet/edit(.:format)            cabinets#edit
                GET    /cabinet(.:format)                 cabinets#show
                PUT    /cabinet(.:format)                 cabinets#update
                DELETE /cabinet(.:format)                 cabinets#destroy

キャビネットショービュー

%table.table.table-striped
  %thead
    %tr
      %th My Ingredients
      %th ID
  %tbody
    - @cabinet.cabinet_ingredients.each do |ci|
      %tr
        %td= ci.ingredient.name
        %td= link_to "delete from cabinet", cabinet_path(ci), method: :delete, confirm: "Are you sure?"

キャビネットコントローラー:

  def show
    @cabinet = current_user.cabinet
  end

  def edit
    @cabinet = current_user.cabinet
    @ingredients = Ingredient.all
  end

  def update
    @ingredients = Ingredient.all
    @cabinet = current_user.cabinet
    if @cabinet.update_attributes(params[:cabinet])
      redirect_to @cabinet
    else
      render 'edit'
    end
  end

  def destroy
    ingredient = CabinetIngredient.find(params[:id])
    ingredient.destroy
    redirect_to cabinet_path
  end
4

1 に答える 1

0

誰かが同様の問題を抱えている場合、私が思いついた解決策は次のとおりです。

キャビネット コントローラーで破棄を行う代わりに、cabination_ingredients コントローラーを作成し、破棄アクションを追加しました。

class CabinetIngredientsController < ApplicationController
  def destroy
    ingredient = current_user.cabinet.cabinet_ingredients.find(params[:id])
    ingredient.destroy
    redirect_to cabinet_path
  end
end

次に、キャビネット ショーを更新して、cabinet_ingredients コントローラーにルーティングするようにしました

%table.table.table-striped
  %thead
    %tr
      %th My Ingredients
      %th ID
  %tbody
    - @cabinet.cabinet_ingredients.each do |ci|
      %tr
        %td= ci.ingredient.name
        %td= link_to "delete from cabinet", cabinet_ingredient_path(ci), method: :delete, confirm: "Are you sure?"

最後にルート:

Mixology::Application.routes.draw do

  resource  :cabinet
  resources :cabinet_ingredients

end
于 2013-02-23T22:14:53.403 に答える