2015-05-22 2 views
-1

Я работаю над Rails и угловым приложением, которое использует Devise для аутентификации. У меня проблемы с доступом к current_user в действии моего контроллера index.Rails Проблемы с дизайном доступа к current_user в контроллере

Мне нужно отображать списки, принадлежащие конкретному пользователю.

class ListsController < ApplicationController 
    respond_to :json 
    before_filter :authenticate_user! 

    def index 
    respond_with current_user.List.all 
    end 

    def create 
    respond_with List.create(list_params.merge(user_id: current_user.id)) 
    end 

end 

Когда я иду к индексу, это не возвращает ошибок нет методы:

Started POST "https://stackoverflow.com/users/sign_in.json" for ::1 at 2015-05-22 18:08:20 -0400 
Processing by Devise::SessionsController#create as JSON 
    Parameters: {"user"=>{}, "session"=>{"user"=>{}}} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
Completed 201 Created in 37ms (Views: 1.5ms | ActiveRecord: 2.9ms) 


Started POST "https://stackoverflow.com/users/sign_in.json" for ::1 at 2015-05-22 18:08:20 -0400 
Processing by Devise::SessionsController#create as JSON 
    Parameters: {"user"=>{}, "session"=>{"user"=>{}}} 
    User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
Completed 201 Created in 14ms (Views: 1.6ms | ActiveRecord: 0.3ms) 


Started GET "/lists.json" for ::1 at 2015-05-22 18:08:20 -0400 
Processing by ListsController#index as JSON 
    User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]] 
Completed 500 Internal Server Error in 7ms 

NoMethodError (undefined method `List' for #<User:0x007fdb5bc37a10>): 
    app/controllers/lists_controller.rb:6:in `index' 

Если изменить «индекс» действие на List.all, он будет возвращать список всех пользователей. Мне нужно только доступ к спискам для определенного пользователя.

Вот мой список модель:

class List < ActiveRecord::Base 
    belongs_to :user 
    has_many :words, dependent: :delete_all 

    def as_json(options = {}) 
     super(options.merge(include: :words)) 
    end 
end 

ответ

3

Вы должны использовать строчную имя - list. По соглашениям List (заглавное слово) - это имя класса (в конечном счете, в вашем случае - модель), а не имя свойства.

Обратите внимание, что если модель пользователя связана с моделью List - что вы можете сделать эти вещи так же, как

# if there is a like in user.rb 
has_many :lists 

# you can use in your controller 
current_user.lists 

all не требуется при указании соответствующих записей. Вот guide

+0

Это работает, спасибо! –

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