如何将正确数量的参数传递给Rails控制器

时间:2013-03-30 17:50:13

标签: ruby-on-rails

我试图通过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旁边的按钮时)。但是我的浏览器中出现了“错误的参数数量”错误。我已经看了好几个小时,非常感谢任何帮助。

1 个答案:

答案 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