【问题标题】:Can use Simple form for fields that doesn't exist in table?可以对表中不存在的字段使用简单表单吗?
【发布时间】:2014-05-29 06:23:35
【问题描述】:

我最近遇到了simple_form,它显示了必填字段的验证错误消息,working example

用法:

<%= simple_form_for @user do |f| %>
  <%= f.input :username %>
  <%= f.input :password %>
  <%= f.button :submit %>
<% end %>

在上述用法中,它仅适用于用户表单字段(即表中存在字段),在我的 Rails 应用程序中,用户表单将出生年份字段作为下拉列表并使用 select_tag 呈现,是否可以显示其他简单表单错误比表单元素?我想使用 simple_form 显示 select_tag 的错误我如何实现它

【问题讨论】:

    标签: ruby-on-rails forms twitter-bootstrap simple-form


    【解决方案1】:

    Sirius ROR 是对的 - 但我觉得您需要更多关于它们如何工作的信息:


    Virtual Attributes

    你需要一个虚拟属性,使用attr_accessor完成

    attr_accessor 是一种用于创建gettersetter 方法的ruby 方法。这基本上意味着您可以创建一系列virtual attributes 用于您的models

    虚拟属性是您声明的方法 (attributes),它们不需要存在于您的数据库中。要回答您关于 birth year 的问题,您需要这样做:

    #app/models/user.rb
    Class User < ActiveRecord::Base
       attr_accessor :birth_year
    end
    

    这为任何User 对象提供了birth_year 属性,例如@user.birth_year


    错误

    如果您要呈现错误,则需要考虑以下几点:

    首先,我认为simple_form 会自动呈现您的错误(虽然不确定):

    这将生成一个带有用户名和标签的完整表单 密码也是如此,并在您渲染时默认渲染错误 包含无效数据的表单(例如提交后)。

    其次,如果你想通过它们各自的字段来呈现错误,你需要知道Rails会自动将错误的字段包装在:

    <div class="field_with_errors">
        <input type="..." >
    </div>
    

    这意味着,如果您想在发生错误时设置此字段的样式,则必须使用 CSS 来完成。

    【讨论】:

      【解决方案2】:

      您可以通过在模型中定义attr_accessor :birth_year 来做到这一点,但它不会将值保存到数据库中,它只会进行验证。

      【讨论】:

      • 我如何显示错误消息我尝试为&lt;%= f.error_messages%&gt; undefined method `error_messages' for #<:formbuilder:0x00000008fefbc0>
      • @m-r: 是&lt;%= f.error_notification %&gt; 不是&lt;%= f.error_messages%&gt;
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-02
      • 1970-01-01
      相关资源
      最近更新 更多