【发布时间】:2018-07-26 11:03:59
【问题描述】:
假设我有一个由Student 模型定义的对象s。这个对象有很多属性,包括一个相关的scores 对象。在与s 相关的show 视图中,有一个按钮可以使用button_to 在新窗口中打开该学生的scores 视图:
<%= button_to t("s.show_scores"), show_scores_path(s: s.id), method: :get, 'data-popup' => true, form: {class: 'button-up'} -%>
现在,有一种情况是学生尚未获得所有分数,在这种情况下,我不希望打开 scores 视图。这是使用控制器中的条件完成的:检查@s.scores.valid?,如果是,则继续,否则不会显示scores 视图,而是打开一个弹出窗口,其中包含当前视图和我发出的警报消息:
def show_scores
@s = Student.find(params[:student])
@s.calc_response_scores_if_missing
if(@s.scores.valid?)
redirect_to students_path, flash: {alert: I18n.t("students.missing_obs")} and return
end
@format = "html"
respond_to do |format|
format.html
end
end
我想更进一步:我希望在单击按钮时检查@s.scores.valid? 条件。如果是肯定的,则继续在弹出窗口中打开视图,如果否定,我不希望打开弹出窗口并且警报出现在当前页面上(显然使用render 而不是redirect_to)。我认为这可以使用remote: true 来完成,但我不太确定如何。任何帮助都会很棒:)
【问题讨论】:
-
是的,这可以通过使用
ajax来完成。此外,您可以在视图中添加条件if-else,当@s.scores.valid?呈现button_to t("s.show_scores"), show_scores_path(s: s.id) ...时,呈现具有相同名称的未链接按钮,并且仅在通过js 点击时显示您的消息。
标签: javascript ruby-on-rails ruby ajax helpers