使用rails 4,以简单的形式设计多态关联嵌套属性

编程入门 行业动态 更新时间:2024-10-12 01:21:29
本文介绍了使用rails 4,以简单的形式设计多态关联嵌套属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

这是我的代码:

用户:

class User< ActiveRecord :: Base devise:database_authenticatable,:rememberable,:trackable,,validatable belongs_to:loginable,polymorphic:true end

设计师:

设计师& ActiveRecord :: Base has_one:user,as::loginable acceptance_nested_attributes_for:user end

布局:

<%= simple_form_for [:admin,@designer] :html => {:class => 'form-horizo​​ntal'} do | f | %GT; <%if f.error_notification%> < div class =alert alert-error淡入> < a class =closedata-dismiss =alerthref =#>& times;< / a> <%= f.error_notification%> <%if @ designer.errors.any? %GT; < ul> <%@ designer.errors.full_messages.each do | msg | %GT; < li><%= msg%>< / li> <%end%> < / ul> <%end%> < / div> <%end%> < div class =control-group> <%= f.label:profile_name,:class => 'control-label'%> < div class =controls> <%= f.text_field:profile_name,:class => 'text_field'%> < / div> < / div> <%= f.simple_fields_for users do | u | %GT; < div class =control-group> <%= u.label:email,:class => 'control-label'%> < div class =controls> <%= u.text_field:email,:class => 'text_field'%> < / div> < / div> < div class =control-group> <%= u.label:password,:class => 'control-label'%> < div class =controls> <%= u.password_field:password,:class => 'text_field'%> < / div> < / div> < div class =control-group> <%= u.label:type,:class => 'control-label'%> < div class =controls> <%= u.input:role,:label => false do%> <%= u.select:role_id,Role.all.map {| r | [r.name,r.id]}%> <%end%> < / div> < / div> < div class =control-group> <%= u.label:firstname,:class => 'control-label'%> < div class =controls> <%= u.text_field:firstname,:class => 'text_field'%> < / div> < / div> <%end%> < div class =form-actions> <%= f.submit nil,:class => 'btn btn-primary'%> < / div> <%end%>

控制器:

code> def create @user = User.new(designer_params) @designer = Designer.new(designer_params) @ user.loginable = @designer respond_to do | format | 如果@ user.save! &安培;&安培; @ designer.save! format.html {redirect_to admin_designers_path,notice:'Designer was successfully created。'} format.json {render action:'show',status::created,location:admin_designer_path(@designer)} else format.html {render action:'new'} format.json {render json:[designer:@ designer.errors,user:@ user.errors],status::unprocessable_entity } end end end def designer_params params.permit(:profile_name,:user,user_attributes:[:email,,password,密码,:firstname,:lastname,:address,:邮政编码,:城市,国家,:角色,角色]] end

我的参数似乎忽略了用户属性,我只是因为某些原因看到个人资料名称。

有关如何修复的任何想法这将非常感谢

谢谢!

解决方案

我设法解决我自己的问题。所以我发布的答案希望拯救别人很多时间。

我最终为用户参数创建另一个私有方法

def designer_params params.require(:designer).permit(:profile_name,user_attributes:[:email,:password,:password,:firstname, lastname,:address,:postalcode,:city,:country,,role,,role_id] end def user_params params [:designer] [:user_attributes]。 ,:password,:password,:firstname,:lastname,:address,:postalcode,:city,:country,,role,,role_id) end

然后使用这些来创建我的关系

def create @designer = Designer.new(designer_params) @user = User.new(user_params) @ user.loginable = @designer @ designer.save! end

如果您无法查看嵌套表单,请确保使用 build_方法

def new @designer = Designer.new @user = @designer .build_user end

I am making a polymorphic association with devise and simple for but for some reason i cant get the params to work

here is my code:

User:

class User < ActiveRecord::Base devise :database_authenticatable, :rememberable, :trackable, :validatable belongs_to :loginable, polymorphic: true end

Designer:

class Designer < ActiveRecord::Base has_one :user, as: :loginable accepts_nested_attributes_for :user end

Layout:

<%= simple_form_for [:admin, @designer] , :html => { :class => 'form-horizontal' } do |f| %> <% if f.error_notification %> <div class="alert alert-error fade in"> <a class="close" data-dismiss="alert" href="#">&times;</a> <%= f.error_notification %> <% if @designer.errors.any? %> <ul> <% @designer.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> <% end %> </div> <% end %> <div class="control-group"> <%= f.label :profile_name, :class => 'control-label' %> <div class="controls"> <%= f.text_field :profile_name, :class => 'text_field' %> </div> </div> <%= f.simple_fields_for users do |u| %> <div class="control-group"> <%= u.label :email, :class => 'control-label' %> <div class="controls"> <%= u.text_field :email, :class => 'text_field' %> </div> </div> <div class="control-group"> <%= u.label :password, :class => 'control-label' %> <div class="controls"> <%= u.password_field :password, :class => 'text_field' %> </div> </div> <div class="control-group"> <%= u.label :type, :class => 'control-label' %> <div class="controls"> <%= u.input :role, :label => false do %> <%= u.select :role_id, Role.all.map { |r| [r.name, r.id] } %> <% end %> </div> </div> <div class="control-group"> <%= u.label :firstname, :class => 'control-label' %> <div class="controls"> <%= u.text_field :firstname, :class => 'text_field' %> </div> </div> <% end %> <div class="form-actions"> <%= f.submit nil, :class => 'btn btn-primary' %> </div> <% end %>

Controller:

def create @user = User.new(designer_params) @designer = Designer.new(designer_params) @user.loginable = @designer respond_to do |format| if @user.save! && @designer.save! format.html { redirect_to admin_designers_path, notice: 'Designer was successfully created.' } format.json { render action: 'show', status: :created, location: admin_designer_path(@designer) } else format.html { render action: 'new' } format.json { render json: [designer: @designer.errors, user: @user.errors], status: :unprocessable_entity } end end end def designer_params params.permit(:profile_name, :user, user_attributes: [:email, :password, :password, :firstname, :lastname, :address, :postalcode, :city, :country, :role, :role_id]) end

My params seems to ignore the user attributes, i only see profile name for some reason.

Any ideas on how to fix this would be greatly appreciated

Thanks!

解决方案

I managed to resolve my own issues. so i am posting the answer hoping to save someone else lots of time.

i ended up creating another private method for the user params

def designer_params params.require(:designer).permit(:profile_name, user_attributes: [:email, :password, :password, :firstname, :lastname, :address, :postalcode, :city, :country, :role, :role_id]) end def user_params params[:designer][:user_attributes].permit(:email, :password, :password, :firstname, :lastname, :address, :postalcode, :city, :country, :role, :role_id) end

and then using those to create my relationship

def create @designer = Designer.new(designer_params) @user = User.new(user_params) @user.loginable = @designer @designer.save! end

also if you are having trouble viewing the nested form make sure to use the build_ method

def new @designer = Designer.new @user = @designer.build_user end

更多推荐

使用rails 4,以简单的形式设计多态关联嵌套属性

本文发布于:2023-08-03 14:25:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1287660.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:嵌套   属性   形式   简单   多态

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!