ruby-on-rails-3 – Rails 3.2 – accepts_nested_attributes_fo
发布时间:2020-12-17 03:21:15 所属栏目:百科 来源:网络整理
导读:我有以下模型:user,role,user_role(user_role是一个连接模型) 我正在尝试使用用户#edit页面上的复选框编辑用户的角色.这是我的尝试,我觉得我错过了一些重要的事情,或采取了错误的方法. user.rb has_many :user_roles,dependent: :destroyhas_many :roles,th
我有以下模型:user,role,user_role(user_role是一个连接模型)
我正在尝试使用用户#edit页面上的复选框编辑用户的角色.这是我的尝试,我觉得我错过了一些重要的事情,或采取了错误的方法. user.rb has_many :user_roles,dependent: :destroy has_many :roles,through: :user_roles attr_accessible :user_roles_attributes accepts_nested_attributes_for :user_roles,reject_if: lambda { |a| a[:role_id] == 0 },allow_destroy: true def has_role?(role_sym) roles.any? { |r| r.name.underscore.to_sym == role_sym.downcase } end def setup_roles! Role.all.each { |role| user_roles.build(user_id: id,role_id: role.id) unless has_role?(role.name.to_sym) } end user_role.rb belongs_to :user belongs_to :role delegate :name,to: :role role.rb has_many :user_roles has_many :users,through: :user_role users_controller.rb def edit @user = User.find(params[:id]) @user.setup_roles! end def update @user = User.find(params[:id]) if @user.update_attributes(params[:user]) flash[:notice] = 'User was successfully updated.' redirect_to edit_user_path(@user) else render :edit end end 用户/ edit.html.haml = form_for @user do |f| = f.fields_for(:user_roles) do |role_form| = role_form.check_box :role_id,{},role_form.object.role_id,0 = role_form.hidden_field :user_id = role_form.label :name,role_form.object.name = f.submit 'Update' 解决方法
这是我的解决方案.我从
This Post at RubySource收到了很多帮助.设置复选框的方式,如果“未选中”,它将销毁UserRole,并且仅在“检查”时创建它(为什么’0′,’1’在该行上.)
users_controller.rb def edit @user = User.find(params[:id]) @user.setup_roles! end user.rb def has_role?(role_sym) roles.any? { |r| r.name.underscore.to_sym == role_sym.downcase } end def setup_roles! Role.all.each { |role| user_roles.build(role: role) unless has_role?(role.name.to_sym) } end 用户/ edit.html.haml = form_for @user do |f| = f.fields_for :user_roles do |builder| = builder.check_box :_destroy,{ checked: builder.object.persisted? },'0','1' = builder.label :_destroy,builder.object.role.name = builder.hidden_field :role_id = f.submit 'Update' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
- c# – 如何使用rowdeleting事件删除gridview中的
- 优化 – 使用SPARQL在给定范围(间隔)中聚合值?
- SWIFT缩写
- ios – unwind segue / performSegueWithIdentif
- Visual C express 2008:为什么它会在发布可执行
- postgresql在windows下备份的批处理文件(修改版
- xml – 元素中命名的复杂类型和匿名复杂类型之间
- xml – 如何计算XQuery中每个不同值的实例?
- ruby-on-rails – 使用to_param为包含分隔符的字
- cocos2dx-3.0(23) ScrollView 缩放 及 touch新用
热点阅读