Tôi đã sử dụng các kỹ thuật RESTful để tạo mô hình (trên thực tế, tôi đang sử dụng đá quý Devise, điều đó cho tôi) và tôi đã thêm các trường mới gọi là first_name và last_name cho mô hình. Di chuyển đã ổn. Tôi đã thêm attr_accessor: first_name,: last_name vào mô hình và dự kiến nó sẽ hoạt động. Nhưng khi tôi cố gắng đại diện cho các trường hợp mới với Doctor.create ({: first_name => "MyName"}) vv, tôi nhận được lỗi nói rằng tôi không thể gán các thuộc tính được bảo vệ theo khối lượng."CẢNH BÁO: Không thể gán số lượng lớn các thuộc tính được bảo vệ"
Tôi nghĩ rằng toàn bộ điểm sử dụng attr_accessor là để có được xung quanh sự bảo vệ của các lĩnh vực của một mô hình. Bạn có thể giúp tôi hiểu được thông điệp này không?
Chỉnh sửa: oh, và nhân tiện các bản ghi cũng không được tạo. Tôi nghĩ rằng họ nên được vì đây chỉ là một cảnh báo, nhưng họ không phải trên cơ sở dữ liệu.
Edit2: đây là mô hình của tôi
class Doctor < User
has_many :patients
has_many :prescriptions, :through=> :patients
validates_presence_of :invitations, :on => :create, :message => "can't be blank"
attr_accessor :invitations
end
và giản đồ, mà không có first_name và last_name vì họ được tạo ra trong bảng người dùng, đó là tổ tiên của các bác sĩ. Tôi đã sử dụng thừa kế bảng đơn.
create_table :doctors do |t|
t.integer :invitations
t.timestamps
end
và đây là sự di cư để thay đổi bảng người dùng
add_column :users, :first_name, :string
add_column :users, :last_name, :string
add_column :users, :type, :string
EDIT: đây là file giống. Tôi không bao gồm phương thức truncate_db_table, nhưng nó hoạt động.
%w{doctors patients}.each do |m|
truncate_db_table(m)
end
Doctor.create(:invitations=>5, :email=>"[email protected]", :first_name=>"Name", :last_name=>"LastName")
Patient.create(:doctor_id=>1, :gender=>"male", :date_of_birth=>"1991-02-24")
Tôi không hiểu lắm về Rails 4 nhưng tôi nghĩ câu hỏi này là câu hỏi Rails 3. Cấu hình mã hóa mặc định trong 'config/application.rb' trong Rails 4 là trống! –
http://apidock.com/rails/ActiveRecord/Base/attr_accessible/class – shilovk