2015-06-25 2 views
1

У меня есть следующие модели ActiveAdminнеопределенный метод `to_model» в рельсах

class AdminUser < ActiveRecord::Base 
has_many :challenges 

    devise :database_authenticatable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

и следующая модель Вызова

class Challenge < ActiveRecord::Base 
    belongs_to :subdomain 
    belongs_to :admin_user 

    has_many :comments, :dependent => :destroy 

end 

я определил следующий метод в моем application.html.erb

helper_method :all_admin_users 

    def all_admin_users 

    @users = AdminUser.all 
    end 

Администратор имеет следующие атрибуты: id,: name,: email Теперь, когда я пытаюсь получить доступ к вызовам конкретного пользователя

<ul> 
<% all_admin_users.each do |user| %> 
<li> <%= link_to user.name ,user.challenges%></li> 
<br /> 
<% end %> 
</ul> 

Я получаю следующее сообщение об ошибке «не определен метод` to_model»для Вызова :: ActiveRecord_Associations_CollectionProxy

вот мой routes.rb файл

Rails.application.routes.draw do 
    resources :comments 
    devise_for :admin_users, ActiveAdmin::Devise.config 

    get 'subdomains/index' 

    get 'subdomains/edit' 

    get 'subdomains/new' 

    get 'subdomains/show' 

    get 'home/index' 




root 'home#index' 


resources :challenges 

resources :subdomains 
    ActiveAdmin.routes(self) 
end 
+0

ошибка «неопределенный метод' to_model»для # <вызов :: ActiveRecord_Associations_CollectionProxy: 0x007fc54980a2a8>» – pokiri

+0

Было бы лучше, если вы редактировали свой вопрос и поставить укороченную предложение обратно к вопросу, а не положить его в комментарий. –

ответ

1

Прежде всего, в вашем файле routes вам необходимо добавить действие, чтобы перечислить пользователей с запросом

В routes.rb в конце добавить

get 'users/:user_id/challenges' => 'challenges#user_challenges', as: :user_challenges 
# this way you will have action to view users challenges 
# inside your challenges controller 

В вашем challenges_controller.rb добавить действие user_challenges

def user_challenges 
    @challenges = Challenge.where(admin_user_id: params[:user_id]) 
end 

Создать представление для этого действия, а также отображать ваши проблемы

Затем вы можете создать ссылку для этого действия

<ul> 
    <% all_admin_users.each do |user| %> 
    <li> <%= link_to user.name , user_challenges_path(user.id)%> </li> 
    <br /> 
    <% end %> 
</ul> 
+0

Спасибо , но это дает мне все проблемы всех пользователей Я хочу, чтобы имена пользователей отображались и при нажатии на имя пользователя Я хочу, чтобы он направлял вызовы, принадлежащие пользователю с щелчком – pokiri

+0

Вы хотите перенаправить на список всех проблем этого пользователя?показать мне маршруты папку – Nermin

+0

см. обновленный вопрос – pokiri

1

Вместо user.challengesuser.challenge

UPDATE

<ul> 
    <% all_admin_users.each do |user| %> 
    <% user.challenges.each do |challenge| %> 
     <li> <%= link_to user.name ,challenges_path(user_id: user.try(:id)) %></li> 
     <br /> 
    <% end %> 
    <% end %> 
</ul> 

challenges_controller.rb

def index 
    @challenges = Challenge.where(admin_user_id: params[:user_id]) 
end 
+0

благодаря , но я получаю следующее сообщение об ошибке «неопределенный метод' вызов»для # » – pokiri

+0

есть ли у вас '' admin_user_id' в Challenge' таблице? – Prashant4224

+0

Да @ prashant Вот список столбцов в таблице вызовов ["id", "title", "body", "input_format", "output_format", "constraints", "subdomain_id", "admin_user_id", "created_at" , "updated_at"] – pokiri

0

В дополнение к ответу Prashant4020 в - Что вы думаете об обновлении пользователя Модель:

class User < ActiveRecord::Base 
... 
belongs_to :admin_user 
... 

и там передняя

class AdminUser < ActiveRecord::Base 
has_many :challenges 
has_many :users 
.... 
Смежные вопросы