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

尼玛

我正在使用devise和simple建立多态关联,但是由于某些原因,我无法使params正常工作

这是我的代码:

用户:

class User < ActiveRecord::Base
  devise :database_authenticatable,
         :rememberable, :trackable, :validatable

  belongs_to :loginable, polymorphic: true
end

设计师:

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

end

布局:

<%= 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 %>

控制器:

  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

我的参数似乎忽略了用户属性,出于某种原因,我仅看到配置文件名称。

任何有关如何解决此问题的想法将不胜感激

谢谢!

尼玛

我设法解决了自己的问题。所以我发布了答案,希望可以节省很多时间。

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

  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

然后用这些来建立我的关系

  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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails 4-多态关联-嵌套属性

来自分类Dev

Rails 4-对嵌套多态属性进行更新操作的多态关联

来自分类Dev

使用嵌套属性和多态关联的用户验证失败

来自分类Dev

Rails 4嵌套属性和has_many:通过关联形式

来自分类Dev

在Rails 4中使用具有多态关系的嵌套形式创建新资源

来自分类Dev

Rails不会使用多态模型保存嵌套形式

来自分类Dev

Rails嵌套与茧的形式。使用模型的属性

来自分类Dev

Rails别名,用于多态关联上的属性

来自分类Dev

Rails最佳实践,使用多态关联

来自分类Dev

Rails 4-Railscast#154多态关联

来自分类Dev

Rails上嵌套资源和简单资源红宝石中的多态注释4

来自分类Dev

通过关联和嵌套模型形式使用has_many选择rails4集合

来自分类Dev

Rails设置范围,用于简单形式关联

来自分类Dev

Rails 4,嵌套关联搜索

来自分类Dev

Rails 4,更新嵌套的多态资源

来自分类Dev

Rails多态添加使用<<

来自分类Dev

使用Rails 4和JQuery以嵌套形式添加/删除项目

来自分类Dev

使用Rails 4以嵌套形式添加Extra Field_for

来自分类Dev

Rails多态关联参考

来自分类Dev

Rails:包含多态关联

来自分类Dev

Rails逆多态关联

来自分类Dev

Rails:多态关联

来自分类Dev

多态关联-Rails

来自分类Dev

在Rails查询中使用关联模型的属性

来自分类Dev

这是在Rails中使用多态关联的合适方案吗?

来自分类Dev

Rails 4多态关联和关注点

来自分类Dev

具有相同模型的Ruby on Rails 4的多态关联

来自分类Dev

Rails 4:Amistad宝石打破了多态性关联

来自分类Dev

具有相同模型的Ruby on Rails 4的多态关联