【问题标题】:Rails one model multiple forms one pageRails 一个模型多个表单一页
【发布时间】:2013-08-20 10:22:56
【问题描述】:

我有一个包含用户模型的 Rails 应用程序。 用户可以编辑属性(地址、姓名、密码、语言环境)。

为了实现 RESTful,我为用户模型创建了一个资源

#routes.rb
resources :users, only: [:edit, :update]

用户可以更新其属性的页面(/users/:id/edit)包含多种形式(一种用于一般信息,如地址,一种用于区域设置,另一种用于更改密码)。

这三种形式中的每一种看起来都像这样:

 = form_for(current_user, html: { class: 'fill-up' }) do |f|
    .padded
      = render 'shared/error_messages', object: current_user
      = f.label :locale
      .input
        = f.select(:locale, [['Deutsch', 'de'], ['English, 'en']])
    .form-actions
      = f.button 'Submit', class: 'button'

问题是,如果我渲染编辑操作以显示 current_user-object 的错误消息,这些错误消息将显示在所有三个表单上。

什么是 Rails 的最佳实践是将模型属性拆分为不同形式并仅在一种特定形式上显示错误消息,而不是全部显示。

【问题讨论】:

  • 所以您试图在使用导致错误的属性的表单中显示错误消息?
  • 是的,到目前为止,错误消息显示在每个表单中,因为每个表单都获取 current_user-object。如果可以在 'shared/error_messages'-Partial 中仅指定要移交的对象的某些属性,那就太好了

标签: ruby-on-rails rest error-handling


【解决方案1】:

一个解决方案是,假设您有 2 个表单 1) 地址 2) 密码

然后在地址编辑表单中只显示当前用户的地址属性错误,例如,

current_user.errors[:address] if current_user.errors.has_key?(:address )

而不是

current_user.errors

类似地,对于密码表单,您只是显示密码错误

current_user.errors[:password] if current_user.errors.has_key?(:password )

这样您就可以避免在所有表单中出现相同的错误。

【讨论】:

  • 太棒了!像魅力一样工作!谢谢!
猜你喜欢
  • 2014-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多