试图弄清楚这一段时间而不能破解坚果。
我想做的就是这个。
我有一个用户模型,它有很多答案。我想限制一个用户多次回答相同答案的能力。我已经能够在模型中阻止它,但不在视图中。
我想要提交按钮,看看current_user.id是否出现在当前的答案ID中(它正在考虑填写),如果是,请禁用提交按钮说“已经应用”。
我回答#new
<%= form_for @answer do |f| %>
<%= f.hidden_field :application_id, value: @application.id %>
<% if @application.question_2.length && @application.question_3.length >= 1 %>
<p>Question 1: <%= @application.question_1 %></p>
<%= f.text_area :answer_1 %><br/>
<p>Question 2: <%= @application.question_2 %></p>
<%= f.text_area :answer_2 %><br/>
<p>Question 3: <%= @application.question_3 %></p>
<%= f.text_area :answer_3 %>
<% elsif @application.question_2.length >= 1 %>
<p>Question 1: <%= @application.question_1 %></p>
<%= f.text_area :answer_1 %><br/>
<p>Question 2: <%= @application.question_2 %></p>
<%= f.text_area :answer_2 %><br/>
<% else %>
<p>Question 1: <%= @application.question_1 %></p>
<%= f.text_area :answer_1 %><br/>
<% end %>
<%= f.submit "Submit answers", data: { disable_with: "Please wait..." } %>
<% end %>
答案 0 :(得分:0)
我看到了几个不同的部分。当我编写类似的功能时,我会考虑以下问题:
首先,如果用户在页面加载时已经提交了答案,则模板应以不同方式显示该按钮。通常,在这种情况下根本不显示表单是有意义的,但如果您希望禁用该按钮的表单,则会想到以下代码(请参阅html example):
<% if @user_has_answered %>
<%= f.submit "Submit answers", disabled: true %>
<% else %>
<%= ... normal button ... %>
<% end %>
如果您担心在页面提交表单时阻止用户点击按钮两次,一些简单的Jquery可以轻松处理,或者您可以使用disable_with
两次。这与数据库的状态无关;它只是设置一个Javascript监听器,一旦单击它(并更改其文本)就会禁用该按钮,以防止用户在页面加载缓慢时意外地双重提交。
您提到您已在模型中阻止了双重答案。控制器如何处理这个?如果用户以某种方式设法再次填写表单并提交它(可能是Javascript被禁用,并且他们在同一页面上打开了多个选项卡?如果可能,用户会这样做),你想要什么?发生在他们提交的数据上?向他们显示拒绝消息?在同一页面上保留他们的数据?如果您需要,此功能在Rails中应为80%自动,只要您处理请求和拒绝的方式与处理表单验证错误的方式相同。
如果您分享有关您正在寻找或遇到问题的详细信息,我很高兴能够更加具体。
答案 1 :(得分:0)
假设答案属于应用程序,你可以做......
<% if current_user.answers.collect(&:application).include?(@application) %>
<%= f.submit "already applied", disabled: true %>
<% else %>
<%= f.submit "Submit answers", data: { disable_with: "Please wait..." } %>
<% end %>