ruby-on-rails – 从高级搜索表单保存搜索选项
发布时间:2020-12-16 21:03:17 所属栏目:百科 来源:网络整理
导读:我有一个高级搜索表单,我想向用户提供一个保存选项的选项.我怎么能做到这一点? 用户应该能够填写高级搜索表单的选项,然后单击“保存此搜索”链接,该链接将存储他们的选项.有了这个,每个用户都将拥有自定义的默认搜索选项,因此每次访问时都不需要重新输入详
我有一个高级搜索表单,我想向用户提供一个保存选项的选项.我怎么能做到这一点?
用户应该能够填写高级搜索表单的选项,然后单击“保存此搜索”链接,该链接将存储他们的选项.有了这个,每个用户都将拥有自定义的默认搜索选项,因此每次访问时都不需要重新输入详细信息. 我认为这对未来很多人都有帮助. 搜索控制器: def new @search = Search.new render layout: 'new_application' end def create @search = Search.new(params[:search]) if @search.save redirect_to @search else render 'new' end end def show @user = current_user @search = Search.find(params[:id]) @users = @search.users render 'users/index',layout: 'new_application' end def update @search = Search.find(params[:id]) if @search.update_attributes(params[:search]) redirect_to @search else render 'new' end end def index if location = Location.find_by_zipcode(params[:search]) latitude = location.latitude * Math::PI / 180 longitude = location.longitude * Math::PI / 180 locations = Location.search( :geo => [latitude,longitude],:with => {:geodist => 0.0..600_000.0},:order => 'geodist ASC',:per_page => 5_000 ) @users = User.where(zip_code: locations.map(&:zipcode)) else @users = User.search(params[:search]) end end def min_age @min_age = params[:min_age].to_i.years end def max_age @max_age = params[:max_age].to_i.years end def youngest_age @youngest_age = params[:youngest_age].years end def oldest_age @oldest_age = params[:oldest_age].years end end 搜索模型: def users @users ||= find_users end private def find_users users = User.order(:id) users = users.where(gender: gender) if gender.present? users = users.where(zip_code: zip_code) if zip_code.present? users = users.where(children: children) if children.present? users = users.where(religion: religion) if religion.present? users = users.where(ethnicity: ethnicity) if ethnicity.present? if min_age.present? && max_age.present? min = [ min_age,max_age ].min max = [ min_age,max_age ].max min_date = Date.today - min.years max_date = Date.today - max.years users = users.where("birthday BETWEEN ? AND ?",max_date,min_date) users end users end end 搜索表单: a.adv_search href="#" = image_tag "adv_link.png" span Advanced Search = form_for @search do |f| .form_container .row .col label I am a select.large option Female option Male .select2 .col.col2 label Seeking = f.select :gender,%w(Female Male) .select1 .col.col3 label Ages = f.select :min_age,options_for_select((18..50),25),{},{class: 'small'} .select5 .col.col4 label to = f.select :max_age,options_for_select((20..50),45),{class: 'small'} .row .col.col5 label Near = f.text_field :zip_code,placeholder: "enter zip here",class: 'text_input' .col.col6 = f.select :children,['I want kids now','I want one someday'],prompt: 'child preference' .select4 .col.col6 = f.select :religion,['Agnostic','Atheist','Christian','Catholic','Buddhist','Hindu','Jewish','Muslim','Spiritual without affiliation','Other','None','Prefer not to say'],prompt: 'Religion' .select4 .col.col7 = f.select :ethnicity,['Asian','Biracial','Indian','Hispanic/Latin','Middle Eastern','Native American','Pacific Islander','White','Other'],prompt: 'Ethnicity' .btm_sec ul.form_list li a href="#" = image_tag "form_icon1.png" span.color Save this Search li a href="#" = image_tag "form_icon2.png" span Load li a href="#" = image_tag "form_icon3.png" span Reset input.find_btn type="submit" value="Find" / .btm_search_detail 解决方法
如果您不想将它们存储在模型中,最好的方法是存储在序列化哈希中.我已经为一个应用程序做了这个,我需要管理员来保存他们的偏好/设置.我尝试了很多宝石,最后我使用了
rails-settings.
即,在您的用户模型中,您可以执行以下操作: class User < ActiveRecord::Base has_settings do |s| s.key :search_options,:defaults => { :gender => 'male'} end end 然后设置/保存设置,您可以执行以下操作: user.settings(:search_options).gender = 'female' user.save! 我喜欢这种方法的是它具有较低的占地面积,如果你开始看到可扩展性问题,那么很容易将其剥离并实现完整的优化模型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |