代码之家  ›  专栏  ›  技术社区  ›  ejunker

用于创建和更新的干表部分

  •  5
  • ejunker  · 技术社区  · 16 年前

    我有一个\u 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 回复  |  直到 16 年前
        1
  •  13
  •   hgmnz    16 年前

    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 %>
    
        2
  •  3
  •   Elizabeth Buckwalter    16 年前

    包装<表格>标记call partial标记,并将submit按钮放在相应的视图中。仅将eula复选框置于创建视图中。

    <%= f.label email, emaillabel %>
    

    [编辑] 如果需要将变量传递给分部,请使用以下命令:

    <%= render :partial => 'form', :locals => { :myvar => myvar } %>