Điều này thực sự khiến tôi thất vọng! :(Đường ray có nhiều thông qua hộp kiểm đa hình
Tôi đang cố gắng để thực hiện một hình thức mô hình lồng nhau cho mô hình tài khoản của tôi với một danh sách hộp kiểm ở trong đó mà nhiều cửa hàng có thể được kiểm tra hoặc không được kiểm soát để quản lý các cửa hàng thông qua mô hình nhân sự.
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
Đối mục đích trong tầm tay hiệp hội staffable khác có thể được bỏ qua. đó là một mô hình tương tự mà tôi cuối cùng muốn muốn quản trị cùng với cửa hàng nhưng trước tiên điều đầu tiên kể từ khi tôi đang rất bối rối vì nó là.
# User Form
- for store in Store.all
%p
= check_box_tag "user[store_ids][]", store.id, @user.stores.include?(store)
= store.nickname
Gửi params của tôi như vậy:
{"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"]}}
Và sau đó L ERI!
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)
Tôi biết tôi phải xây dựng staffable_type là 'Store' nhưng tôi đã cố gắng cả ngày - mẹo là gì?
Tôi có các cột staffable_type (và id) được đặt thành: null => false nhưng không thể là nguyên nhân của việc này vì điều này cần được thẳng ra trong bộ điều khiển trước khi nhấn DB.
Tại sao dưới đây không làm việc trong hành động tạo của tôi:
@user.staffings.each do |s|
s.staffable_type = 'Store'
end
hay:
@user.store_ids.each do |i|
s = @user.staffings.build
s.staffable_type = 'Store'
s.staffable_id = i
end
Nếu đã cố gắng rất nhiều điều tương tự như trên không có kết quả. Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.
Cảm ơn bạn đã dành thời gian!