Ruby on rails 在RubyonRails中结合提交操作和导航
我想在RubyonRails中构建一个选择题测验,但是尽管我已经完成了,但我仍然想改进我的导航 目前,我有两个按钮:一个用于提交测验猜测(这是答案的一个属性),另一个用于选择下一个:问题。我想将这两个按钮组合成一个按钮,这样我就不必首先更新属性,然后选择下一个问题 你是怎么做的 我的问题是:Ruby on rails 在RubyonRails中结合提交操作和导航,ruby-on-rails,Ruby On Rails,我想在RubyonRails中构建一个选择题测验,但是尽管我已经完成了,但我仍然想改进我的导航 目前,我有两个按钮:一个用于提交测验猜测(这是答案的一个属性),另一个用于选择下一个:问题。我想将这两个按钮组合成一个按钮,这样我就不必首先更新属性,然后选择下一个问题 你是怎么做的 我的问题是: def quiz_guess @survey = Survey.first Answer.update(params[:answers].keys, params[:answers].v
def quiz_guess
@survey = Survey.first
Answer.update(params[:answers].keys, params[:answers].values)
if @survey.save
flash[:notice] = "Guess saved successfully."
redirect_to(:action => 'show_quiz', :id => @survey.next, :survey_id => @survey.id)
else
render 'show'
end
end
def show_quiz
@answer = Answer.find(params[:id]) #answer
@answers = Answer.where(:survey_id => @survey.id)
@question = Question.find(params[:id])
@questions = Question.where(:survey_id => @survey.id)
@surveys = Survey.all
@survey = Survey.find(params[:id])
end
我的show_测验视图:
<%= form_tag quiz_guess_questions_path, :method => :put do %>
<% for question in @survey.questions do %>
<li><%= question.content %></li>
<% for answer in question.answers do %>
<li>
<%= fields_for "answers[]", answer do |f| %>
<%= answer.content %>
<%= f.check_box :guess, :checked => false %>
<% end %>
</li>
<% end %>
<% end %>
<%= submit_tag "Guess" %>
<% end %>
<%= link_to t('.back', :default => t("helpers.links.back")), surveys_path, :survey_id => @survey.id, :class => 'btn btn-default' %>
<%= link_to t('Previous question', :default => t("helpers.links.previous")), {:action => 'show', :id => @survey.previous, :survey_id => @survey.id}, :class => 'btn btn-default' %>
<%= link_to t('Next question', :default => t("helpers.links.next")), {:action => 'show', :id => @survey.next, :survey_id => @survey.id}, :class => 'btn btn-default' %>
:put do%>
假%>
t(“helpers.links.back”)),调查路径,:survey\u id=>@survey.id,:class=>'btn btn默认值'%>
t(“helpers.links.previous”),{:action=>'show',:id=>@survey.previous,:survey_id=>@survey.id},:class=>'btn btn default'>
t(“helpers.links.next”),{:action=>'show',:id=>@survey.next,:survey\u id=>@survey.id},:class=>'btn btn default'>
我的模型:
def next
Survey.limit(1).order("id ASC").where("id > ?", id).first
end
def previous
Survey.limit(1).order("id DESC").where("id < ?", id).last
end
def next
调查。限额(1)。顺序(“id ASC”)。其中(“id>?”,id)。第一
结束
def先前版本
调查。限制(1)。顺序(“id描述”)。其中(“id<?”,id)。最后
结束
我想改进您的下一个
(和上一个
)功能。首先,当您在末尾有.First
或或时,您不需要有限制(1)
.first
和.last
每个保证只返回一条记录
问题是当您调用@survey时。下一个在您的上一条记录上,它将不会指向任何内容。这里你有两个选择。首先,您可以使用检查,如果next
返回nil
,请禁用next按钮
第二,使顺序循环。点击最后一次调查的next
,进入第一次调查,反之亦然。以下是方法:
def next
Survey.order("id ASC").where("id > ?", id).first || Survey.first
end
def previous
Survey.order("id DESC").where("id < ?", id).last || Survey.last
end
def next
Survey.order(“id ASC”)。其中(“id>?”,id)。first | | Survey.first
结束
def先前版本
调查。顺序(“id描述”)。其中(“id<?”,id)。最后一次| |调查。最后一次
结束
非常感谢您的评论。我遇到的问题是,我在测验中调用@survey=survey.first,因此它将始终返回到第一条记录。如果我写@survey=survey.find(params[:id])
它会给我一个RecordNotFound错误-找不到带有'id'的记录=你能做返回render json:params
作为你方法的第一行,并且可以检查你收到的参数是什么吗?{“答案”:{“1”:{“猜测”:“0”},“2”:{“猜测”:“1”},“3”:{“猜测”:“0”},“4”:{“猜测”:“1”},“提交”:“猜测”,“utf8”:”✓","_方法“:“放置”、“真实性”令牌“:“W3j3HnqgsCT+5E3XcmmZ0gU/Xj/V0btscAmG/BBPT0TU9DNSHI8GOSGWYPM10KRJHIHEYRECCZPLR5IOD3VXQ=”,“控制器“:“问题”、“操作”:“测验猜测”}
非常感谢您的帮助。@ljnissen显然,您在参数中没有收到id
。有点不对劲。