我试图通过interview_participants控制器删除interview_participant表中的条目。我遇到了很多问题,但我遇到了错误:
InterviewsParticipantsController中的ArgumentError#destroy“错误的参数数量(0表示1)”
interview_participant的模型是......
class InterviewParticipant < ActiveRecord::Base
belongs_to :interview
belongs_to :participant
attr_accessible :interview_id, :participant_id
和interview_participants控制器中的destroy方法是
def destroy
@interview_participant = InterviewParticipant.where(:interview_id => params[:interview_id]).where(:participant_id => params[:participant_id])
@interview_participant.destroy
respond_to do |format|
format.html { redirect_to interview_participant_url }
format.json { head :no_content }
end
end
我希望能够通过此destroy方法删除interview_participant表中的行,从而删除面试中的参与者。在面试的“节目”视图中,我正在参与者,并希望有一个按钮来删除参与者。在接受采访的节目视图中,我有......
<p>
<b>Participants</b>
<% @interview.participants.each do |participant| %>
<dd><%= participant.name %></dd>
<dd><%= button_to( "Remove", {
:controller => "interview_participants",
:action => "destroy",
:interview_id => @interview.id,
:participant_id => participant.id },
:method => :delete,
:confirm => "Are you sure?"
) %></dd>
<% end %>
</p>
我认为我传递了正确的论据,因为我的网址是/interview_participants/1?interview_id=3&participant_id=2
(当我按下参与者2和面试3旁边的按钮时)。但是我的浏览器中出现了“错误的参数数量”错误。我已经看了好几个小时,非常感谢任何帮助。
答案 0 :(得分:0)
您遇到的问题是您的查询:
@interview_participant = InterviewParticipant.where(:interview_id => params[:interview_id]).where(:participant_id => params[:participant_id])
因为您使用where
而返回一个数组。
您需要在此处调用.first
来获取单个对象或致电.destroy_all
我建议您更新查询以使用find
,以便返回一个奇异的资源,例如:
@interview_participant = InterviewParticipant.find_by_interview_id_and_participant_id(params[:interview_id], params[:participant_id])
这样您就可以正确地呼叫.destroy