1

我正在尝试通过 interviews_participants 控制器删除 interview_participant 表中的一个条目。我已经解决了许多问题,但遇到了一个错误:

InterviewsParticipantsController#destroy 中的 ArgumentError “参数数量错误(0 代表 1)”

interview_participant 的模型是...

class InterviewParticipant < ActiveRecord::Base
  belongs_to :interview
  belongs_to :participant

  attr_accessible :interview_id, :participant_id

并且 interview_participants 控制器中的销毁方法是

  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

我希望能够通过这种销毁方法删除 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>

我认为我传递了正确的论点,因为我的 URL 是/interview_participants/1?interview_id=3&participant_id=2(当我按下参与者 2 和采访 3 旁边的按钮时)。但是我在浏览器中收到“错误数量的参数”错误。我已经看了几个小时了,非常感谢任何帮助。

4

1 回答 1

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正确调用

于 2013-03-30T18:11:05.473 回答