Trong ứng dụng Rails, tôi chỉ yêu cầu người dùng nhập email và tên khi đăng ký, nhưng sau đó cung cấp cho họ tùy chọn cung cấp chi tiết liên hệ đầy đủ hơn cho tiểu sử của họ. Vì vậy, tôi có một mô hình User.rb có một hiệp hội với Contact.rb, cụ thể là,cách tham gia bảng được liên kết với liên kết has_one
User.rb
has_one :contact
Contact.rb
belongs_to :user
Contact.rb có thể dự đoán được các trường bạn có thể mong đợi, chẳng hạn như địa chỉ, mã bưu chính, v.v. nhưng nó cũng lưu giữ province_id cho mối quan hệ với mô hình Province.rb, do đó,
Liên hệ.rb
attr_accessible :address, :city, :mobile, :postalcode, :province_id, :user_id
belongs_to :user
belongs_to :province
Province.rb
has_many :contacts
tôi đã làm nó theo cách đó (chứ không phải lưu trữ tên của tỉnh như là một "chuỗi" trên contact.rb) để tôi có thể dễ dàng hơn (vì vậy tôi nghĩ) phân loại người dùng theo tỉnh.
Trong chương trình hành động của một trong những artists_controller, tôi làm như sau để kiểm tra xem người dùng đang cố gắng để sắp xếp theo tỉnh và sau đó gọi một phương pháp artists_by_province mà không tìm kiếm
if params[:province_id]
province = params[:province_id]
province = province.to_i #convert string to integer
@artistsbyprovince = User.artists_by_province(province)
else
@artists = User.where(:sculptor => true)
end
Đây là phương pháp trên mô hình User.rb mà nó gọi nếu một id tỉnh được thông qua tại
scope :artists_by_province, lambda {|province|
joins(:contact).
where(contact: {province_id: province},
users: {sculptor: true})
}
Tuy nhiên nó mang lại cho tôi lỗi này:
Could not find table 'contact'
Nếu tôi làm cho danh bạ số nhiều
scope :artists_by_province, lambda {|province|
joins(:contacts).
where(contacts: {province_id: province},
users: {sculptor: true})
}
Lỗi này
Association named 'contacts' was not found; perhaps you misspelled it?
bất cứ ai có thể cho tôi biết những gì tôi đang làm sai khi tôi đang làm cho truy vấn này?
Cập nhật: Tôi đã thay đổi một số chi tiết sau khi công bố vì sao chép và dán của tôi đã có một số vấn đề với nó
T.B. bỏ qua thực tế là tôi đang tìm kiếm một 'nhà điêu khắc'. Tôi đã thay đổi tên của các loại người dùng cho câu hỏi.
từ schema.rb
create_table "contacts", :force => true do |t|
t.string "firm"
t.string "address"
t.string "city"
t.string "postalcode"
t.string "mobile"
t.string "office"
t.integer "user_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
t.integer "province_id"
end
đó đã cho tôi lỗi này: Hiệp hội có tên là 'province_id' không được tìm thấy; có lẽ bạn đã viết sai chính tả nó? – Leahcim
Xin vui lòng, xem bài viết cập nhật của tôi –
Tôi không có kinh nghiệm với điều này. Giải pháp của bạn có tốt hơn tôi không? Nếu có, bạn có thể giải thích tại sao không? Cảm ơn. – Leahcim