点击删除后,我希望我的页面重定向到当前用户的投票。就像这样。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
表中保存的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