2016-09-12 1 views
0

Я создаю RailsApp, чтобы Пользователь мог объявить их :buisness_type через f.select в views/profiles/_form.html.erb.Как Current_user фильтрует других пользователей на основе той же категории, что и current_user?

А затем в views/users/show.html.erbcurrent_user может вводить значения для автомобильных поездок в поле ввода.

Что я хочу, чтобы дать возможность current_user отфильтровывать других пользователей на основе их: buisness_type. Таким образом, current_user может видеть в views/users/show.html.erb Среднее значение для других пользователей car_trip в том же :business_type.

В views/profiles/_form.html.erb у меня есть этот код, который получают сохраненную в Profile.rb модели:

<div class="form-group"> 
     <%= f.label :buisness_type %>    
     <%= f.select(:buisness_type, grouped_options_for_select(Profile::BUISNESS_TYPES),{ :class => 'form-control' })%> 
</div> 

И в views/users/show.html.erb I'm делает это частичное:

<%= form_for @transport, html: {class: 'form-horizontal'} do |f| %> 

    <div class="control-group"> 
     <%= f.label :Transport_type, class: 'control-label' %><br> 
     <div class="controls"> 
      <%= f.select(:transport_type, options_for_select(Transport::TRANSPORT_TYPES)) %> 
     </div> 
    </div> 

    <div class="control-group"> 
     <%= f.label :Trip_length_km, class: 'control-label' %><br> 
      <div class="controls"> 
       <%= f.number_field :transport_km %> 
      </div> 
    </div> 

    <div class="control-group"> 
     <%= f.label :Number_of_trips, class: 'control-label' %><br> 
      <div class="controls"> 
       <%= f.number_field :transport_num_of_trips %> 
      </div> 
    </div> 

    <div class="control-group"> 
     <%= f.label :Recycled_fuel, class: 'control-label' %><br> 
      <div class="controls"> 
       <%= f.number_field :transport_km_recycled_fuel %> 
      </div> 
    </div> 


    <div class="control-group"> 
     <div class="controls"> 
     <%= f.submit class: 'btn btn-xs btn-warning' %> 
     </div> 
    </div> 


<% end %> 

    <%= link_to 'Back', transports_path %> 

</div> 

I'm также делает это Таблица диаграммы в views/users/show.html.erb Это диаграмма диаграмм.

<div class="col-md-6 chart-box"> 

        <%= column_chart [ 
       {name: "CarTrips #{current_user.profile.name}", data: current_user.transports.group(:transport_type).sum(:transport_km)}, 
       {name: "CarTrips Everyone Median", data: Transport.group(:transport_type).average(:transport_km)}], { stacked: true, height: "300px", xtitle: "CarTrips", ytitle: "Km/CarTrips"} %> 

     </div> 

Как вы можете видеть, что я в состоянии, чтобы показать среднюю поездку для каждого пользователя автомобиля независимо от того, в каком бизнесе они находятся. Как я могу позволить current_user только увидеть Average для автомобилей поездок другого пользователи в том же типе бизнеса, в котором они находятся? Это возможно.

В users_controller.rb Я это в методе show

def show 
    @user = User.find(params[:id]) 
    @users = User.order('created_at DESC').paginate(page: params[:page], per_page: 30) 
    @transport = current_user.transports.build 
end 

ДОБАВЛЕННЫЕ Модели

это user.rb модель

class User < ActiveRecord::Base 

    has_one :profile 
    accepts_nested_attributes_for :profile 

    def average_transport_types 
    self.transports.group(:transport_type).sum(:transport_km) 
    end 
end 

это profile.rb модель

class Profile < ActiveRecord::Base 
belongs_to :user 
end 

ответ

0

Просто добавьте where на ту часть, которая вытаскивает пользователям, например:

+0

Спасибо, я понимаю, но это дает мне эту ошибку 'неопределенный метод«business_type»для # <Пользователь: 0x007f804a7b9c70 > ' – DaudiHell

+0

Могу я просто сделать это так: @ bus_type = User.where (: buisness_type => current_user.profile.buisness_type) .order ('created_at DESC'). Paginate (страница: params [: page], per_page : 30) ', но я не уверен, как интегрировать' @ bus_type' в Column_Chart – DaudiHell

+0

уверенно, хотя я бы не назвал '@ bus_type' - это имя не отражает то, что вы делаете ... что вытаскивает новый набор пользователей, фильтруется по бизнес-типу. Я был бы склонен называть его чем-то вроде '@ users_by_business_type' или схожим ... быть явным с вашим именем, чтобы быть добрым к вашей будущей самостоятельной прочтении этого материала :) –

Смежные вопросы