【发布时间】:2015-09-02 19:40:01
【问题描述】:
我正在尝试使用 ransack 创建搜索结果。
我已经完成了结果。
用户可以创建文章,每个用户都有一个角色。
- 常规
- 特权
- 商家
这些角色位于名为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模型的架构是什么? -
对不起,我添加了文章架构
标签: ruby-on-rails search ransack