2014-04-04 3 views
0

В моем приложении, когда обычный пользователь входит в систему, они забрасываются на панель мониторинга, на которой отображаются служебные запросы для компании: belong_to.Rails 4: form_for с вложенным ресурсом и без

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

Представления между обычным пользователем и пользователем администратора практически одинаковы, за пределами одного или двух объектов в форме (которые управляются через cancan). Поэтому я пытаюсь использовать ту же форму, если администратор создает SR или обычный пользователь создает SR.

routes.rb:

resources :service_requests do 
    resources :notes 
    end 

    namespace :admin do 
    get '', to: 'dashboard#index', as: '/' 

    resources :companies do 
     resources :service_requests, only: [:index, :new] 
    end 
    end 

Если админ зайдет и нажимает на логотип компании и щелкает, чтобы создать новый SR, маршрут /admin/companies/1/service_requests/new. Если в него входит обычный пользователь, /service_requests/new. Я просто немного запутался в том, как повторно использовать ту же форму как для администратора, так и для стороннего администратора. Потому что я устанавливаю company_id на SR в моем создании ресурса в ServiceRequestsController

+0

Не будет ли создание связано с маршрутом 'admin/companies/1/service_requests'? –

+0

@ManojMonga - Я не уверен, как это было бы, поскольку маршрут отличается в зависимости от того, находитесь ли вы в режиме администратора и обычном представлении пользователя – dennismonsewicz

ответ

0

я сделать что-то вроде следующего, чтобы использовать ту же форму на admin и not admin использованием cancan

#models/ability.rb 
class Ability 
    include CanCan::Ability 

    def initialize(user) 
    if user.is_admin? #replace this by something that returns true if logged-in user is admin 
     can :generate_this_form_fields, User 
     #^normally can -> points to a method in the controller, but you can 
     # create one even if you're not validating any method, just so you could use it anywhere 
    end 
    end 
end 

Хотя на представлении файл, в котором ваша форма, что-то вроде

#views/form.html.erb 
<%= form_tag ... %> 
    <% if can? :generate_this_form_fields, User %> 
    This is where the fields are displayed if admin account 
    <% else %> 
    This is where the fields are displayed if not admin 
    <% end %> 
<% end %> 

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

<% if current_user.is_admin? %> 

И не

<% if can? :generate_this_form_fields, User %> 

Но я сделал пример таким образом, что может соответствовать тому, что вы пытаетесь решить. Надеюсь, это поможет. Ура!

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