0

同一のロジックと思われるものをコピーしていますが、私のモデルの 1 つでは機能しません。

調査では、私は持っています

意見

<% @surveys.each do |survey| %>
  ...
  <%= link_to 'Delete', survey, :confirm => 'Are you sure?', :method => :delete %>
<% end %>

コントローラ

def destroy
  @survey = Survey.find(params[:id])
  @survey.destroy

  respond_to do |format|
    format.html { redirect to '/' }
    format.json { head :no_content }
  end
end

削除機能は正常に動作します。

それでも問題はありますが、私は持っています

意見

<% @questions.each do |question| %>
  ...
  <%= link_to 'Delete', question, :confirm => 'Are you sure?', :method => :delete %>
<% end %>

コントローラ

def destroy
  @survey = Survey.find(params[:survey_id])
  @question = Question.find(params[:id])
  @question.destroy

  respond_to do |format|
    format.html { redirect to @survey }
    format.json { head :no_content }
  end
end

これは私にエラーを与えます:

  undefined method `question path' for #<#<Class:0x008ff2534....

を削除するとlink_to、正常に取得questionされ、そのプロパティが機能します。

私の見解のロジックをより具体的なものに変更し、

<%= link_to "Delete", :controller => "questions", :action => "destroy", :id => question.id %>

より具体的なエラーが発生します。

No route matches {:controller=>"questions", :action=>"destroy", :id=>1}

を実行rake routesすると、パスが存在することが確認されます。

DELETE /surveys/:survey_id/questions/:id(.:format)    questions#destroy

そして、ここに私のroutes.rbエントリがあります:

devise_for :users do
  resources :surveys do
    resources :questions do
      resources :responses
    end
  end
end

コンピューターは間違いを犯さないのに、私は何を間違えたのでしょうか?

4

2 に答える 2

2

Question は Survey の下にネストされたリソースであるため、ルートはそれを反映する必要があります。rake routes 出力に:survey_idは、ルートの一部としてパラメーターがあることに注意してください。必須です。したがって、リンクは次のようにする必要があります。

<%= link_to "Delete", :controller => "questions", :action => "destroy", :survey_id => @survey.id, :id => question.id %>

または、マレクのパスを使用して、質問リソースの名前空間を指定することもできます。

<%= link_to 'Delete', [@survey, question], :confirm => 'Are you sure?', :method => :delete %>
于 2013-06-18T19:22:19.337 に答える
2

questionsネストされたリソースであるため、次surveyのパスにも渡す必要があります。

<%= link_to 'Delete', [@survey, question], :confirm => 'Are you sure?', :method => :delete %>

@survey変数を設定したと仮定します。

于 2013-06-18T19:20:10.733 に答える