В Rails много флажков с помощью полиморфных флажков

Это меня действительно сбивает! :(

Я пытаюсь создать форму вложенной модели для моей модели пользователя со списком флажков в ней, где можно установить или снять отметку с нескольких магазинов для управления магазинами с помощью модели Персонал.

class Staffing < ActiveRecord::Base
  # Associations
  belongs_to :user
  belongs_to :staffable, :polymorphic => true
  belongs_to :store,     :class_name => "Store",
                         :foreign_key => "staffable_id"
end

class User < ActiveRecord::Base
  # Includes
  acts_as_authentic

  # Associations
  has_many :staffings, :dependent => :destroy
  has_many :stores, :through => :staffings

  # Nested Attributes
  accepts_nested_attributes_for :staffings, :allow_destroy => true
end

class Store < ActiveRecord::Base
  # Associations
  has_many :staffings, :as => :staffable, :dependent => :destroy
  has_many :users, :through => :staffings
end


# Users Controller
def create
  @user = User.new(params[:user])
  flash.now[:notice] = "#{@user.name} was successfully created." if @user.save
  respond_with @user
end


def update
  @user = User.find(params[:id])
  params[:user][:store_ids] ||= []
  @user.update_attributes(params[:user])
  flash.now[:notice] = "#{@user.name} was successfully updated."
  respond_with @user
end

Для наших целей другую укомплектованную ассоциацию можно игнорировать. Это похожая модель, которую я в конечном итоге хотел бы использовать вместе с Store, но первым делом в первую очередь, так как я и так в тупике.

# User Form
- for store in Store.all
  %p
    = check_box_tag "user[store_ids][]", store.id, @user.stores.include?(store)
    = store.nickname

Отправляет мои параметры как таковые:

{"utf8"=>"✓",
 "authenticity_token"=>"blub-blub-blub=",
 "user"=>{"login"=>"hey.buddy",
 "email"=>"test@hey.net",
 "role"=>"admin",
 "hq"=>"1",
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]",
 "store_ids"=>["3",
 "4"]}}

И затем ОШИБКА!

Mysql2::Error: Column 'staffable_type' cannot be null: INSERT INTO `staffings` (`created_at`, `staffable_id`, `staffable_type`, `updated_at`, `user_id`) VALUES ('2010-11-17 00:30:24', 3, NULL, '2010-11-17 00:30:24', 102)

Я знаю Мне нужно создать Staffable_type как «Store», но я пытался весь день - в чем фокус?

У меня есть столбцы staffable_type (и id), установленные на: null => false, но это не может быть причина этого, так как это должно быть исправлено в контроллере, прежде чем попадать в базу данных.

Почему следующее не работает в моем действии create:

@user.staffings.each do |s|
  s.staffable_type = 'Store'
end

или:

@user.store_ids.each do |i|
  s = @user.staffings.build
  s.staffable_type = 'Store'
  s.staffable_id = i
end

Если я пробовал много вещей, похожих на выше безрезультатно. Любая помощь будет принята с благодарностью.

Спасибо за ваше время!

5
задан blastula 17 November 2010 в 00:47
поделиться