Начнем с моделей. Вы говорите, что каждый имеет User
только одинPhoneBook
, так что я хотел бы сказать, что правые модели должны быть достаточно:
class User < ActiveRecord::Base
has_one :phone_book
end
class PhoneBook < ActiveRecord::Base
belongs_to :user
end
Теперь о контроллерах. Когда у вас есть подписанный номер User
, вы, в конце концов, будете иметь «сеансовую вещь». Предположим, вы используете devise, тогда у вас будет переменная current_user
, которая ссылается на зарегистрированного пользователя. Таким образом, PhoneBooksController
будет что-то вроде:
class PhoneBooksController < ApplicationController
def index
@phone_book = current_user.phone_book
end
end
Конечно, если ваши пользователи могут иметь более чем один PhoneBook
мы вернемся к has_many
ассоциации:
class User < ActiveRecord::Base
has_many :phone_book
end
class PhoneBook < ActiveRecord::Base
belongs_to :user
end
и контроллер становится:
class PhoneBooksController < ApplicationController
def index
@phone_books = current_user.phone_books
end
def show
@phone_book = PhoneBook.find_by_id(params[:id])
end
end
Наконец, если вы хотите, чтобы эти телефонные книги были общедоступными, я предлагаю вам придерживаться вида UR REST Я
/phone_books/:id <-- good
/users/:id/phone_books/:phone_book_id <-- too complex
Надежда Я мог бы помочь
Так в основном вы успешно установлено имеет много отношений между пользователем и phone_book правильно? Вам просто нужно указать эту информацию о телефонной книге на странице профиля пользователя (технически профиль users_controllers/показать действие). это ? – Ajay
Это не просто отображение контактов пользователю. Пользователь должен иметь возможность выполнять операции CRUD в своих личных контактах.Прошу прощения со мной, я новичок в Rails –
Да Понял теперь. Пожалуйста, проверьте ниже ответ. Помещение ресурса телефонной книги внутри пользователей будет делать трюк :) – Ajay