¡Esta me está deprimiendo! :(Rails tiene muchas cajas de verificación polimórficas
que estoy tratando de hacer una forma anidada modelo para mi modelo de usuario con la lista pulsando en ella donde múltiples tiendas pueden ser activada o desactivada para administrar los almacenes a través del modelo de personal.
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
Para los efectos en la mano de la otra asociación staffable puede ser ignorada. es un modelo similar que me finalmente desea administrar junto Store pero primero que del primero ya que estoy tan confundido como es.
# User Form
- for store in Store.all
%p
= check_box_tag "user[store_ids][]", store.id, @user.stores.include?(store)
= store.nickname
Envía mis params junto como tal:
{"utf8"=>"✓",
"authenticity_token"=>"blub-blub-blub=",
"user"=>{"login"=>"hey.buddy",
"email"=>"[email protected]",
"role"=>"admin",
"hq"=>"1",
"password"=>"[FILTERED]",
"password_confirmation"=>"[FILTERED]",
"store_ids"=>["3",
"4"]}}
Y luego ERROR!
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)
Yo sé que tengo que construir staffable_type como 'tienda', pero yo he estado tratando durante todo el día - ¿cuál es el truco?
Tengo las columnas staffable_type (y id) establecidas en: null => false, pero eso no puede ser la causa de esto, ya que es necesario enderezarlo en el controlador antes de pulsar el DB de todos modos.
¿Por qué el siguiente no funciona en mi acción create:
@user.staffings.each do |s|
s.staffable_type = 'Store'
end
o:
@user.store_ids.each do |i|
s = @user.staffings.build
s.staffable_type = 'Store'
s.staffable_id = i
end
Si ha de probar muchas cosas similares a las anteriores en vano. Cualquier ayuda sería apreciada masivamente.
¡Gracias por su tiempo!