ruby-on-rails - 用于创建和更新的 DRY 表单部分

标签 ruby-on-rails forms dry

我有一个 _form.html.erb 表单部分,它有助于干掉我的代码,但我需要表单具有不同的标签,具体取决于我是创建新用户还是更新现有用户。

这是我的部分表格。我不需要在更新期间显示 eula 复选框,我还需要在更新时将“创建我的帐户”提交按钮文本替换为更合适的内容。

<% form_for @user do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name, 'Full name' %><br />
    <%= f.text_field :name %>
  </p>
  <p>
    <%= f.label :username %><br />
    <%= f.text_field :username %>
  </p>
  <p>
    <%= f.label :email, 'Email address' %><br />
    <%= f.text_field :email %>
  </p>
  <p>
    <%= f.label :password %><br />
    <%= f.password_field :password %>
  </p>
  <p>
    <%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %>
  </p>
  <p>
    <%= f.check_box :eula %>
    <%= f.label :eula, 'I agree to the terms and conditions' %>
  </p>
  <p><%= f.submit "Create my account" %></p>
<% end %>

以下哪一项是最好的方法?
  • 有 2 个单独的表单部分,一个用于创建,一个用于更新
  • 有 1 个表单,但有基于操作的条件标签(这可能吗?)
  • 将公共(public)部分分解为部分并在创建和更新表单中重用它

  • 如果我要执行条件形式,我将如何检查正在执行的操作?

    最佳答案

    ActiveRecord 有 new_record?可以用来决定在表单上显示什么的方法:

    <% form_for @user do |f| %>
      <%= f.error_messages %>
      <p>
        <%= f.label :name, 'Full name' %><br />
        <%= f.text_field :name %>
      </p>
      <p>
        <%= f.label :username %><br />
        <%= f.text_field :username %>
      </p>
      <p>
        <%= f.label :email, 'Email address' %><br />
        <%= f.text_field :email %>
      </p>
      <p>
        <%= f.label :password %><br />
        <%= f.password_field :password %>
      </p>
      <p>
        <%= f.label :password_confirmation %><br />
        <%= f.password_field :password_confirmation %>
      </p>
      <% if @user.new_record? %>
        <p>
          <%= f.check_box :eula %>
          <%= f.label :eula, 'I agree to the terms and conditions' %>
        </p>
      <% end %>
      <p><%= f.submit @user.new_record? ? "Create my account" : "Update my account" %></p>
    <% end %>
    

    关于ruby-on-rails - 用于创建和更新的 DRY 表单部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1460769/

    相关文章:

    ruby-on-rails - 编写无效的 FactoryGirl 工厂/特征是个坏主意吗?

    ruby-on-rails - Rails-用于自定义操作的Form_tag

    javascript 阻止表单提交

    python - 如何在 Django 中进行表单验证

    java - 删除或重复私有(private)静态

    ruby-on-rails - ActiveRecord::StatementInvalid: PG::Error: ERROR: cannot execute UPDATE in a read-only transaction 错误在 Heroku

    mysql - 使用foreign gem 指定自定义外键列名称

    javascript - 提交和页面更改后,表单值保留为 cookie

    javascript - AngularJS Controller ,DRY 代码的设计模式

    css - 如何从此 css 类选择器声明中删除(删除冗余)?