0

少し複雑なモデルの関連付けがあります。

class Company < ActiveRecord::Base
  has_many :roles, :dependent => :destroy
  has_many :users, :through => :roles
end

class Role < ActiveRecord::Base

  belongs_to :user
  belongs_to :company
  attr_accessor :roles_attributes
  attr_accessible :roles_attributes, :active, :company_id, :role 
  validates_presence_of :company_id, :role
  validates_uniqueness_of :user_id, :scope => :company_id, :message => "Users may only have one role per company."
end

class User < ActiveRecord::Base
  has_many :roles, :dependent => :destroy
  accepts_nested_attributes_for :roles, :allow_destroy => true 
  has_many :companies, :through => :roles
end

ここでの意図は、1 人のユーザー (電子メール アドレス) が、会社ごとに異なる権限 (役割) を持つさまざまな会社の下でログインできるようにすることです。

会社の下にネストされたユーザーがいて、更新コントローラーは正常に機能しますが、新しい/作成コントローラーを機能させることができないようです:

コントローラ:

  def new
    @user = User.new
    @role = @user.roles.build.company_id = session[:company_id]

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

  def create

    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render json: @user, status: :created, location: @user }
      else
        format.html { render action: "new" }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

そしてビュー:

<%= simple_nested_form_for [:company, @user] do |f| %>
  <fieldset>
    <div class="form-horizontal">

    <%= f.input :email %>
    <%= f.input :name_first %>
    <%= f.input :name_last %>
    <%= f.input :title %>
    <%= f.input :phone %>
    <%= f.input :mobile %>

    <%= f.simple_fields_for :roles, @role do |role_form| %>
        <%= role_form.hidden_field :company_id %>
        <%= role_form.input :active %>
        <%= role_form.input :role, :collection => [ "Guest", "User", "Inspector", "Owner"] %></td>
    <% end %>
    <%= f.input :notes, :input_html => { :rows => 5, :cols => 70 } %>
    <div class="form-actions">
      <%= f.submit nil, :class => 'btn btn-primary' %>
      <%= link_to 'Cancel', company_users_path, :class => 'btn' %>
    </div>
  </fieldset>
<% end %>

フォームを送信すると、ログで「roles_attributes」が次のように渡されていることに気付くことを除いて、サイレントに失敗します。

"roles_attributes"=>{"0"=>{"company_id"=>"2", "active"=>"1", "role"=>"Inspector"}}

私はそうあるべきだと思います:

"roles_attributes"=>[{"company_id"=>"2", "active"=>"1", "role"=>"Inspector"}]

明らかな何かが欠けているに違いありません。

4

1 に答える 1

0

でしたhas_secure_password。パスワード フィールドを削除したため、検証に失敗しました。

于 2012-08-11T06:04:31.210 に答える