Một vài điều:
Khối lượng chuyển nhượng thường có nghĩa là đi qua các thuộc tính vào cuộc gọi tạo ra một đối tượng như là một phần của một thuộc tính băm. Tức là, bạn chuyển một loạt các thuộc tính trong một băm vào cuộc gọi tạo đối tượng mới. Ví dụ:
@user = User.create({:name => "My name", :user_type => "nice_user"})
Tuy nhiên, Rails bao gồm một số quy tắc bảo mật cơ bản có nghĩa là không phải tất cả các thuộc tính có thể được gán cách mà theo mặc định. Bạn phải xác định cái nào có thể trước. Bạn làm như vậy như thế này:
class User < ActiveRecord::Base
attr_accessible :name, :user_type
end
Nếu bạn không chỉ định một thuộc tính là attr_accessible
, và bạn vượt qua nó để tạo ra các đối tượng, bạn nhận được lỗi bạn được đăng.
Dưới đây là chi tiết:
http://api.rubyonrails.org/v3.2.9/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html
Cách khác là để thiết lập một số thuộc tính khi bạn lần đầu tiên tạo ra các kỷ lục, và thiết lập khác sau - như vậy:
# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save
Ngoài ra, nếu bạn gặp sự cố khi sử dụng tên cột type
vì đường ray bị nhầm lẫn và cho rằng bạn muốn sử dụng Thừa kế bảng đơn (STI), hãy kiểm tra câu trả lời cho câu hỏi này để xem cách thực hiện: http://guides.rubyonrails.org/
Nguồn
2012-05-13 20:38:21
"Loại" cột được sử dụng bởi mặc định bằng đường ray cho STI. Giải pháp tốt nhất là đổi tên cột kiểu thành cái gì khác. Cách giải quyết không được đề xuất là thêm vào tệp mô hình của bạn self.inheritance_column =: some_other_column_that_might_not_exists – bcd
Có - xem thông tin này để biết thông tin về vấn đề STI sử dụng cột 'loại': http://stackoverflow.com/questions/7134559/rails-use-type-column-without-sti (mặc dù một tùy chọn tốt hơn có thể là thay đổi tên của cột). –
vâng - Tôi đã gặp sự cố này. Đã thay đổi tên cột. thnks! – Karan