ruby-on-rails - Rails 部分验证取决于控制器
问题描述
我正在使用设计进行用户注册,这意味着默认情况下,新用户是通过 registrations_controller 注册的。因此,通过单击“注册”按钮,用户将被重定向到new_user_registration path.
然而,我的注册表有两个步骤。在第一步(new_user_registration)中,我要求输入名称和密码。在第二步(users_controller)中,当用户被保存时,我要求地址。这是我用向导 gem 做的:
def create
@user = User.new(params[:user])
if @user.save
session[:user_id] = @user.id
redirect_to user_steps_path
else
render :new
end
end
因此,这些是一种部分验证,但我无法根据步骤进行验证,因为我的表单的第一部分是通过注册控制器处理的。然而,第二部分在 users_controller 中。这里变得越来越复杂,我想知道是否可以根据控制器进行验证。喜欢:
validates :first_name, presence: true, if: -> { new_user_registration_path }
validates :last_name, presence: true, if: -> { new_user_registration_path }
validates :street, presence: true, if: -> { new_user_path }
我知道,像这样,毫无意义,但也许有助于理解我背后的想法。另外,也许我可以和 smth 一起工作。喜欢:
validates :first_name, presence: true, if: -> { @user.save }
validates :last_name, presence: true, if: -> { @user.save }
validates :street, presence: true, if: -> { @user.update}
所以基本上,在创建新用户时,我会验证名称和密码是否存在。然后添加地址(这是用户的更新操作)时,我将检查地址是否存在。有没有人有过这样的表格的经验?
另一个想法,也许,我可以跳过注册控制器,直接重定向到用户并为部分验证创建两个步骤?但是当我正在使用设计时,我不知道是否可以通过用户控制器,跳过 new_user_registration 路径。我做到了,它是如何在 wicked tutorial 上得到建议的,但最终还是出现在注册控制器中:
def create
super
end
def update
super
end
谢谢!
解决方案
推荐阅读
- wordpress - 使用 Wordpress REST API 创建带有自定义 url / meta 标签的页面
- python - Decoding a string with python with portuguese characters
- python-3.x - How to change a normal method into a property method
- amazon-web-services - aws fargate 在任务定义中定义日志导致云形成永远不会完成
- python - 使用 Rabbitmq 作为经纪人,芹菜工人是在推 api 还是拉 api 上工作?
- maven-surefire-plugin - 为 DynamicTest 设置测试名称
- java - 使用 POST 请求从 Wordpress 网站发送邮件
- excel - VBA 宏删除包含 #N/A 的单元格并向上移动单元格(不是行)
- python - Switching between screens defined in separate .kv (Kivy) files
- ios - Admob 横幅广告最佳做法