Я пытаюсь создать результат поиска с помощью ransack.Сортировка статей в зависимости от созданной им роли пользователей
У меня уже есть результаты.
Пользователи могут создавать статьи, и каждый пользователь имеет свою роль.
- Regular
- Привилегированный
- Merchant
Эти роли в таблице называется UserRole
Я хочу, чтобы отобразить результаты поиска приоритизации Merchants
затем Privileged
и, наконец, Regular
,
Статьи Контроллер:
def index
@users = User.all
@roles = UserRole.all
@q = Article.ransack(params[:q])
# check if no search is made, it will show a blank page with search options only
if params[:q].blank?
@q = Article.none.ransack # so you have a ransack search
else
@q = Article.ransack params[:q]
end
# display results from search
@articles = @q.result.paginate(page: params[:page], :per_page => 10).order('created_at DESC')
end
index.html.erb
<% @articles.each do |article| %>
...
<% end %>
пользователи схемы
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.inet "current_sign_in_ip"
t.inet "last_sign_in_ip"
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "first_name"
t.string "last_name"
t.string "phone"
t.boolean "admin", default: false
t.integer "user_role_id", default: 1
end
USER_ROLE схема
create_table "user_roles", force: :cascade do |t|
t.string "role_name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Вопрос
Как отобразить результаты поиска приоритизации Merchants
затем Privileged
и, наконец, Regular
?
редактировать
статья схемы
create_table "articles", force: :cascade do |t|
t.string "name"
t.float "price"
t.string "description"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.integer "category_id"
end
практически решена
изменил
- @articles = @q.result.paginate(page: params[:page], :per_page => 10).order('created_at desc')
в
+ @articles = @q.result.paginate(page: params[:page], :per_page => 10).joins(:user).order('users.user_role_id desc')
Теперь она отображает пользователь, которые имеют роль 3 Merchant
первыми и когда они создают новую статью нового один идет к вершине, как хорошо, но если 1 Regular
пользователя создает статью он опускается ниже 2 Privileged
и 3 Merchant
пользователей, которые создали статью.
Но теперь, когда регистрируется новый обычный пользователь, он ставит новые статьи ниже старых ...
решаемые
@articles = @q.result.paginate(page: params[:page], :per_page => 10).joins(:user).order('users.user_role_id desc', 'created_at desc')
('users.user_role_id desc', 'created_at desc')
Что такое схема модели 'article'? –
Прошу прощения, я добавил схему статьи –