使用accepts_nested_attributes_for从视图中保存两个模型时遇到问题

时间:2013-10-29 23:38:56

标签: devise ruby-on-rails-4 nested-attributes

我有两个型号。公司和master_user,它是设计用户。我在公司控制器的创建操作中尝试创建公司对象时获得了一个未经许可的参数:master_user。

模型

company.rb

class Company < ActiveRecord::Base
    has_many :users
    has_one :master_user
    accepts_nested_attributes_for :master_user

end


master_user.rb

class MasterUser < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  belongs_to :company
end

这是我公司的观点

<%= form_for(@company) do |f| %>
  <% if @company.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@company.errors.count, "error") %> prohibited this company from being saved:</h2>

      <ul>
      <% @company.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>




  <%= f.fields_for @company.master_user do |m_user| %> 
   <div class="field">
    <%= m_user.label :email %>
    <%= m_user.text_field :email %>
   </div>

   <div class="field">
      <%= m_user.label :password %>
      <%= m_user.password_field :password %>
   </div>

   <div class="field">
      <%= m_user.label :confirm_password %>
      <%= m_user.password_field :confirm_password %>
   </div>

  <% end %>
  <div class="actions">
    <%= f.submit %>
  </div>


<% end %>

和公司控制人员

# GET /companies/new
  def new
    @company = Company.new
    @company.build_master_user
  end


  # POST /companies
  # POST /companies.json
  def create
    puts "a"
    @company = Company.new(company_params)
    puts "b"
    respond_to do |format|
      if @company.save
        format.html { redirect_to @company, notice: 'Company was successfully created.' }
        format.json { render action: 'show', status: :created, location: @company }
      else
        puts "c"
        format.html { render action: 'new' }
        format.json { render json: @company.errors, status: :unprocessable_entity }
      end
    end
  end

def company_params
      params.require(:company).permit(:id, :name, :isTrial, :employMax, master_user_attributes: [:id, :email, :password, :confirm_password, :company_id])
end

我允许按照rails 4的要求参数。但由于某种原因,它仍然拒绝我的master_user

1 个答案:

答案 0 :(得分:0)

问题在于,Devise在Rails 4中使用强大的参数,并不能自动地了解这些参数。所以请明确告诉他,就像在question中一样。