Good Afternoon All,
我正在试图找出如何阻止用户离开编辑页面,包括点击其他链接,直到user.valid?
有没有人知道在模型中执行此操作的方法。仅供参考,目前是带有验证的模型。
#validations for common attributes
validates :email, presence: true, on: :create, uniqueness: true,
:format => /@/
validates :password, presence: true, on: :create, length: {minimum: 6}
#validations blocks for dev
with_options :if => lambda { |o| o.role_type == "developer" } do |dev|
dev.validates :first_name, presence: true, on: :update
dev.validates :last_name, presence: true, on: :update
dev.validates :LANGUAGES, presence: true, on: :update
dev.validates :dev_desc, presence: true, on: :update
dev.validates :github, presence: true, on: :update,
:format => URI::regexp(%w(http https github))
dev.validates :stackoverflow, presence: true, on: :update,
:format => URI::regexp(%w(http https stackoverflow))
dev.validates :level, presence: true, on: :update
dev.validates :street, presence: true, on: :update
dev.validates :city, presence: true, on: :update
dev.validates :state, presence: true, on: :update
dev.validates :postcode, presence: true, on: :update
end
#validations block for employer
with_options :if => lambda { |o| o.role_type == "employer" } do |e|
e.validates :company_name, presence: true, on: :update,
uniqueness: true
e.validates :employer_desc, presence: true, on: :update
e.validates :area_of_focus, presence: true, on: :update
e.validates :number_of_employees, presence: true, on: :update
e.validates :street, presence: true, on: :update
e.validates :city, presence: true, on: :update
e.validates :state, presence: true, on: :update
e.validates :postcode, presence: true, on: :update
end
也许是一个after_validation钩子,但我不确定,想要一些建议。
更新:在应用程序控制器中尝试使用以下内容但挂钩到所有页面,我将如何仅为用户分配方法。
def check_valid
if current_user.valid? == false
render :action => :edit
else
jobs_path
end
end
答案 0 :(得分:0)
一种方法是,当成员进入编辑页面时,您在其会话中设置一个变量member_on_edit = true
,并且您需要通过JS提交表单以更改编辑表单的任何元素并存储当前表单状态进入会议。
这样,您就可以在before_filter
中放置ApplicationController
,将成员重定向到编辑页面,并使用会话中存储的数据填充表单元素。
会话结构状态有效且会员点击“提交”后,您可以设置member_on_edit = false
并阻止进一步过度重定向到编辑表单。
答案 1 :(得分:0)
好的,为了解决这个问题,我采用了@dosadnizub提到的想法并将其放在我的应用程序控制器中。
def check_privileges!
redirect_to "/users/edit" unless current_user.valid?
end
然后我在相关控制器中使用它来阻止用户转义编辑页面。尚未完全测试它,但现在运作良好:
before_filter :check_privileges!, only: [:new, :create]