ruby-on-rails - 在 Rails 中链接两个 Controller

标签 ruby-on-rails ruby model controllers

我有一个登录的用户个人资料,每个个人资料都有自己的电话簿,其他用户无法访问。问题是我应该如何实现它。将用户视为一个 Controller ,将电话簿视为另一个 Controller ,我无法为特定用户登录建立两者之间的关系。

我的方法应该是什么?

我有一个单独的用户模型和单独的电话簿模型,并使用 has_manybelongs_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/

相关文章:

ruby-on-rails - 为什么 GC stat minor_gc_count 递减?

javascript - 如何进行实时同步编辑?

ruby-on-rails - 返回率 |如何让 content_tags 嵌套?

ruby - 如何将字符串附加到存在或不存在的变量?

ruby-on-rails - 如何将 MAC 地址转换为格式化 MAC 地址

c# - 使用 NHibernate 实现全局化

php - cakephp saveall 如果在保存之前返回 false 则中断

javascript - 如何将 javascript 变量传递到 Rails Controller 中?

ruby - 如何使用 gsub 提取 youtube 视频的 ID?

c# - 用于共享列表的 MVVM 应用程序中的列表模型是否可行?