这是我的代码:
用户:
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-horizontal'} 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 endDesigner:
class Designer < ActiveRecord::Base has_one :user, as: :loginable accepts_nested_attributes_for :user endLayout:
<%= 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="#">×</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]) endMy 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) endand then using those to create my relationship
def create @designer = Designer.new(designer_params) @user = User.new(user_params) @user.loginable = @designer @designer.save! endalso 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,以简单的形式设计多态关联嵌套属性
发布评论