【问题标题】:How to render different forms for various account types in ruby on rails?如何在 ruby​​ on rails 中为各种帐户类型呈现不同的表单?
【发布时间】:2016-07-21 15:20:29
【问题描述】:

多个设计注册表视图

我假设第一行 div 中注入的 ruby​​ 的整个格式不正确。我包括它以显示所需的设计注册视图的数量。我也包括了错误,知道它很明显。

有人愿意借此机会为多个 if、elsif、when 等语句举例说明正确的 RoR 格式吗?我喜欢所有的意见。

请原谅并更正您认为合适的任何不正确的术语。

谢谢


错误:SyntaxError in Devise::RegistrationsController#new


设计/注册/new.html.erb

<div class="row">
  <%= if params[:plan] == '1' %>
      Contributor
  <%= elsif params[:plan] == '2' %>
      Elite Contributor
  <%= elsif params[:plan] == '3' %>
      Technician
  <%= elsif params[:plan] == '4' %>
      Elite Technician
  <%= elsif params[:plan] == '5' %>
      Center
  <%= elsif params[:plan] == '6' %>
      Elite Center
  <%= elsif params[:plan] == '7' %>
      Affair
  <%= elsif params[:plan] == '8' %>
      Elite Affair
<% end %>

  <div class="col-md-4 col-md-offset-4">
    <div class="well">
      <div class="page-header text-center">
        <h2>JOIN</h2>
        <li role="separator" class="divider"></li>
      </div>

      <%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
        <%= devise_error_messages! %>

        <div class="field form-group">
          <%= f.label :email %><br />
          <%= f.email_field :email, autofocus: true, class: 'form-control' %>
        </div>

        <div class="field form-group">
          <%= f.label :password %>
          <% if @minimum_password_length %>
          <em>(<%= @minimum_password_length %> characters minimum)</em>
          <% end %><br />
          <%= f.password_field :password, autocomplete: "off", class:'form-control' %>
        </div>

        <div class="field form-group">
          <%= f.label :password_confirmation %><br />
          <%= f.password_field :password_confirmation, autocomplete: "off", class:'form-control' %>
        </div>

        <br>

        <div class="actions text-center">
          <%= f.submit " JOIN ", class:'btn btn-lg btn-success' %>
        </div>
      <% end %>

      <div class="text-right">
        <%= render "devise/shared/links" %>
      </div>

    </div>
  </div>
</div>

控制器/pages_controller.rb

def home
    @contributor_plan = Plan.find(1)
    @elitecontributor_plan = Plan.find(2)
    @technician_plan = Plan.find(3)
    @elitetechnician_plan = Plan.find(4)
    @center_plan = Plan.find(5)
    @elitecenter_plan = Plan.find(6)
    @affair_plan = Plan.find(7)
    @eliteaffair_plan = Plan.find(8)
end

pages/home.html.erb

(我主页视图上的众多红宝石链接之一)

<%= link_to "Contributor", new_user_registration_path(plan: @contributor_plan.id), class:'btn btn-info btn-lg btn-block' %>

【问题讨论】:

  • 尝试注释掉几乎所有代码,然后逐块取消注释以找出导致语法错误的部分。找到相关块后,看看是否可以将其缩小到一行并更新您的帖子。
  • @nicholas79171 - 感谢您提供简单有效的提示。我会经常使用它。我已将错误范围缩小到注册文件中第一个“div 行”中注入的 ruby​​ 代码。删除此代码后,它会成功路由到正确的视图(url 计划 ID 匹配),但无法在表单中为每个不同的计划显示唯一的 html。

标签: ruby-on-rails if-statement model-view-controller devise controller


【解决方案1】:

我看到的第一件事是您在 if/elsif 中使用 erb 标签而不是 。这是不必要的并且可能存在问题。尝试取出 =。

一些额外的想法:

这将是case 语句而不是if 条件的好地方。

在 Rails 中,最好的做法是将像这样的大块代码提取到帮助方法中,而不是放在视图中。这通常不仅仅是样式问题,因为它会更容易调试。

最后,您在这里尝试做什么并不完全清楚。在我看来,代码唯一要做的就是在表单上方显示不同的文本,而下面的表单不受 erb 代码的影响。这让我怀疑有一种更简单、更不容易出错的方法来做你正在做的事情。各种计划的硬编码链接和实例变量也是危险信号。我会尝试重构代码。

【讨论】:

  • 感谢您的宝贵时间和详尽的回答。你是一位绅士和学者。删除“=”解决了我的问题。我会认真对待您的建议,并努力提高自己对正确 RoR 实践的理解。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多