在Rails控制器中检索当前参数值-错误:could 't find Question without a ID



点击删除后,我希望我的页面重定向到当前用户的投票。就像这样。questions_controller.rb:

  def destroy
    @poll_id = Question.find(param[:poll_id])
    @question.destroy
    respond_to do |format|
      format.html { redirect_to user_poll_url(current_user.id, @question.poll_id), notice: "Question was successfully destroyed." }
      format.json { head :no_content }
    end
  end

Questions_controller的内容与生成的rails相同,除了上面的更改。

question_controller将poll_id作为参数。如何检索它的当前值以用于重定向?

def question_params
  params.require(:question).permit(:poll_id, :title, :description)
end

routes.rb

  resources :users do
    resources :polls
  end
  resource :polls do
    resources :questions 
  end

得到的错误是:

ActiveRecord::RecordNotFound in QuestionsController#destroy
Couldn't find Question without an ID
Extracted source (around line #52):           
  # DELETE /questions/1 or /questions/1.json
  def destroy
    @poll_id = Question.find(param[:poll_id])
    session[:return_to] ||= request.referer
    @question.destroy

,第52行为@poll_id = Question.find(param[:poll_id])

param[:poll_id]不正确。您总是在名为params的方法中获得控制器中的这些属性,并且当我们从前端提交表单时,Rails将它们映射到特定的键(模型的单数名称),例如,要获得poll_id,您需要使用:

question_params[:poll_id]

相当于:

params[:question][:poll_id]

也不确定poll_id是否等于questions表中保存的idfind方法总是通过id查找,这意味着:

Question.find(param[:poll_id])

SELECT * FROM questions WHERE id = param[:poll_id]

所以如果poll_id相当于id,那么这很好,或者你可能想用find_by代替find,或者你也可以用params[:id]代替poll_id,如果存在的话(取决于你的路由)。

更多关于参数的信息:https://edgeguides.rubyonrails.org/action_controller_overview.html#parameters

相关内容

最新更新