Siema.
Jak ustawić scopa na pole ‘name’ które jest stringiem
przykładowo mam pole age:integer
wszystko działa
scope :published -> {where(‘age IS NOT NULL’)
ale co kiedy chce zrobic scopa na stringa
ktoś coś?
Siema.
Jak ustawić scopa na pole ‘name’ które jest stringiem
przykładowo mam pole age:integer
wszystko działa
scope :published -> {where(‘age IS NOT NULL’)
ale co kiedy chce zrobic scopa na stringa
ktoś coś?
scope :my_scope, -> { where.not(name: nil) }
My routes:
resources :products do
collection do
get :published
get :surname
end
end
My model:
scope :age_null, {where(‘age IS NOT NULL’)} - its work
scope :surname_null, {where.not(surname: nil)} - to nie dziala
My controller:
def published - to dziala
@products = Product.age_null
render action: ‘index’
end
def surname
@products = Product.surname_null
render action: ‘index’
end
My index:
Ten dziala
<ul>
<li <% if params[:action] == ‘index’ %> class=“active” <%end %>> <%= link_to ‘All articles’, products_path %> </li>
Ten dziala
<li <% if params[:action] == ‘published’ %> class=“active” <%end %>> <%= link_to ‘Only published age yes’, published_products_path %> </li>
Nie dziala
<li <% if params[:action] == ‘surname’ %> class=“active” <%end %>> <%= link_to ‘Only without surname’, surname_products_path %> </li>
</ul>
Co robie źle - dodam jeszcze ze pole:
‘age’ - jest integerem (działa również kiedy typ pola ustawie na boolean)
‘surname’- jest stringiem (i tu nie wiem jak ustawic scopa na to pole zeby pokazac tylko pola które nie sa puste?)
Prawdopodobnie masz tam pustego stringa a nie wartość nul jeśli Ci to nie działa? Nie wyszukuje?
Jeśli masz ustawionego na default ‘’ czyli pusty string powinno działać.
Jeśli nie działa pokaz jeszcze schema
create_table “pruducts”, force: :cascade do |t|
t.string “name”
t.string “surname”
t.integer “date”
t.datetime “created_at”, null: false
t.datetime “updated_at”, null: false
t.boolean “published”
end
Pokaz wynik tego skopa z konsoli a nastepnie również na. All czy masz takie rekordy
Wszystko działa na polach ‘age’ oraz ‘date’ - ale jak wykonac scopa na pole które jest stringiem.
Kiedy klikne na link_to ‘Only without name’
pokazuje wszystkie rekordy!
Wszystkie rekordy stworzone przez aplikacje.
w Product
scope :name_null
zwraca te rekordy ktrorych name
jest rozny od zera … czyli wszystkie rekordy z bazy
“only without name” - potrzebujesz te ktore:
String
scope :without_name, -> {where("name IS NULL OR name = ''")}
Your answer is correct - THANKS DarkCoin