当有人试图在 rails 应用程序中重复一个动作时出错——如何处理?

Error when someone tries to repeat an action in rails app -- how to handle?

我有 rails 4 并且是 运行 postgresql 用于事件注册应用程序。用户通过设计注册。

如果用户已经点击 "join" 注册活动并尝试再次注册,他们会收到一般的 404 错误。

我想做类似 <%= if user_signed_in? %> 的事情,以便在有人已经加入活动时隐藏 "Join" link。那可能吗?我希望在事件索引的 index.html.erbshow.html.erb 以及每个事件的 show 页面上都这样做。

或者,是否可以创建一些 Javascript 告诉用户 "Hey, you already signed up for this so you can't do it again"?

这是index.html.erb中的当前代码:

<% @events.each do |event| %>
  <div class="event">
    <strong> <%= event.event_name %>  </strong>
    <p><%= event.location %> <br>
    <%= event.event_date_time.strftime("%A %D at %I:%M %p") %></p>
    <div class="meta">
        <% link_name = "Join" %>
          <% if user_signed_in? %>
            <%= link_to "Join", join_path(event) %> |
            <%= link_to "Show", event_path(event) %>
          <% end %>
          <% if current_user.try(:admin?) %>
          <span class="admin"> | <%= link_to "Edit", edit_event_path(event) %> |
        <% message = "Are you sure you want to delete this event?" %>
        <%= link_to "Delete", event, method: :delete, data: { confirm: message} %>
        <% end %>
      </span>
    </div>
  </div>
<% end %>

Github 回购:https://www.github.com/yamilethmedina/wheels_registration

测试服务器:http://wheels-registration-yamilethmedina.c9.io(如果您的答案有所不同,它也会部署在 Heroku 上)

让我们假设有一个带有提交按钮的表单。所以脚本看起来像:

$('#myForm').one('submit', function() { $(this).find('input[type="submit"]').attr('disabled','disabled'); });

使用devise这种认证系统作为事件注册系统有点不切实际。让用户通过设计创建帐户然后收集额外数据并将其存储为与会者模型等可能更合适。无论哪种方式,您都应该能够获得所需的行为。

<% unless user_signed_in? %> 
  <%= link_to "Join", join_path(event) %> 
<% else %> 
  <%= link_to "Show", event_path(event) %> 
<% end %>