retrieve current parameter value in Rails controller - Error: Couldn't find Question without an ID
retrieve current parameter value in Rails controller - Error: Couldn't find Question without an 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
table 中保存的 id
。 find
方法总是通过 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
单击删除后,我希望我的页面重定向到当前用户的投票。像这样的东西。 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
table 中保存的 id
。 find
方法总是通过 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