我有一个登录的用户个人资料,每个个人资料都有自己的电话簿,其他用户无法访问。问题是我应该如何实现它。将用户视为一个 Controller ,将电话簿视为另一个 Controller ,我无法为特定用户登录建立两者之间的关系。
我的方法应该是什么?
我有一个单独的用户模型和单独的电话簿模型,并使用 has_many 和 belongs_to 宏在它们之间建立了关系。
最佳答案
让我们从模型开始。您说每个User
只有一个PhoneBook
,所以我想说正确的模型应该是:
class User < ActiveRecord::Base
has_one :phone_book
end
class PhoneBook < ActiveRecord::Base
belongs_to :user
end
现在,关于 Controller 。
当您登录用户
时,您最终将发生“ session 事件”。
假设您正在使用 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
Controller 变成:
class PhoneBooksController < ApplicationController
def index
@phone_books = current_user.phone_books
end
def show
@phone_book = PhoneBook.find_by_id(params[:id])
end
end
最后,如果您希望这些电话簿可供公众阅读,我建议您坚持使用 REST URI 类型
/phone_books/:id <-- good
/users/:id/phone_books/:phone_book_id <-- too complex
希望能帮上忙
关于ruby-on-rails - 在 Rails 中链接两个 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200325/