我的應用程序包括3種型號:對相關車型on Rails的4 Ruby中使用命名範圍
FashionModel
Measurement
ModelProfile
class FashionModel < ActiveRecord::Base
has_secure_password
has_one :model_profile
has_one :measurement
accepts_nested_attributes_for :model_profile
accepts_nested_attributes_for :measurement
end
class ModelProfile < ActiveRecord::Base
belongs_to :fashion_model
end
class Measurement < ActiveRecord::Base
belongs_to :fashion_model
end
的模式大致如下:
create_table "fashion_models", force: :cascade do |t|
t.string "first_name", limit: 25
t.string "last_name", limit: 25
t.string "email", limit: 255, null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "password_digest", limit: 255
t.string "password_reset_token", limit: 255
t.datetime "password_reset_sent_at"
end
create_table "measurements", force: :cascade do |t|
t.integer "fashion_model_id", limit: 4
t.decimal "feet", precision: 10
t.decimal "inches", precision: 10
t.decimal "bust", precision: 10, default: 36
t.decimal "waist", precision: 10, default: 28
t.decimal "hips", precision: 10, default: 36
t.decimal "shoes", precision: 10
t.integer "dress", limit: 4
t.string "eyes", limit: 255
t.string "hair", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "model_profiles", force: :cascade do |t|
t.integer "fashion_model_id", limit: 4
t.string "phone_number", limit: 255
t.date "birthdate"
t.text "bio", limit: 65535
t.string "location", limit: 255, default: "Venice"
t.string "gender", limit: 255
t.decimal "rate", precision: 10, default: 100
t.string "profile_picture", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_index "model_profiles", ["fashion_model_id"], name: "index_model_profiles_on_fashion_model_id", using: :btree
add_foreign_key "bookings", "fashion_models"
add_foreign_key "fashion_model_photos", "fashion_models"
end
我正試圖根據輸入過濾出數據。例如,有人搜索一個身高爲5'8「的模型,黑色的眼睛和棕色的頭髮,我應該只通過查詢數據庫來顯示那些模型。
因此,我試圖在模型中使用命名的範圍。我不知道我該怎麼辦範圍measurement
表由FashionModel
模型編寫一個範圍的屬性。
我在網上看了一些資源,從我的理解,我寫的東西像
scope :eye_color, includes(:measurement).where(measurement: { eyes: "Amber" })
儘管我不想將Amber
硬編碼到眼睛領域,但我在我的錯誤控制檯試圖訪問此範圍時。我做類似
a = FashionModel.all
a.eye_color
這給了我一個和ArgumentError: wrong number of arguments (given 0, expected 1)
。
我也試着這樣做
scope :eye_color, -> (eye_color) { where eyes: eye_color }
,然後通過a.eye_color("Amber")
,這反過來給了我一個NoMethodError: undefined method 'measurement' for Class
調用它。
所以基本上我想從父模型範圍到子模型。 任何幫助非常感謝!由於
我得到一個語法錯誤'意外 ')','expecting'意外keyword_end,期待「:
然後用像PARAM查詢}'' –
我試過這樣做。它給了我類似於'SELECT'fashion_models'。'id'AS t0_r0,'fashion_models'。'first_name'AS t0_r1,'fashion_models'。'last_name'AS t0_r2'然後拋出一個錯誤: 'ActiveRecord :: StatementInvalid :Mysql2 ::錯誤:未知列'measurement.eyes'' –