我正在创建一个wikpedia模拟器。我的应用有标准用户,高级用户和管理员。高级用户可以创建私人wiki并添加协作者。协作者可以是标准用户。我已将我的协作者迁移设置为具有user_id和wiki_id。我无法弄清楚如何在用户的页面上显示他们是合作者的维基。我已经展示了他们创建的维基 - 这很容易。我已经在我的wiki.rb def collabs
中启动了一个方法,我认为应该收集每个用户的协作者信息,但我不知道如何在我的用户显示中使用它.html.erb文件。我对rails非常陌生,我真的只有使用简单的do循环来显示信息的经验。例如,这就是我显示用户wiki的方式:
<% @user.wikis.each do |w| %>
<%= link_to w.title, w, :class => 'rq-link' %>
<% if w.private? %>
<small>(private)</small>
<% end %>
<br />
<% end %>
这是我的wiki.rb:
class Wiki < ActiveRecord::Base
belongs_to :user
scope :alphabetical, -> { order("title ASC") }
scope :visible_to, -> (user) { (user.admin? || user.premium?) ? all :where(private: false) }
has_many :users, through: :collaborators
has_many :collaborators
def collaborator_for(user)
collaborators.where(user_id: user.id).first
end
def users
collaborators.collect(&:user)
end
def collabs
users.collect(&:collaborator)
end
end
这是m User.rb:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable
has_many :wikis
has_many :collaborators
after_initialize :default_role
enum role: [:standard, :premium, :admin]
def default_role
self.role ||= :standard
end
end
Collaborator.rb:
class Collaborator < ActiveRecord::Base
belongs_to :user
belongs_to :wiki
end
协作者表:
class CreateCollaborators < ActiveRecord::Migration
def change
create_table :collaborators do |t|
t.references :user, index: true, foreign_key: true
t.references :wiki, index: true, foreign_key: true
t.timestamps null: false
end
end
end
答案 0 :(得分:0)
如果这有助于其他人,这就是我解决问题的方法:
我将以下内容添加到user.rb中:
has_many :wiki_collaborations, through: :collaborators, source: :wiki
然后在我的用户的显示页面上,我显示了:
<% @user.wiki_collaborations.each do |collab| %>
<%= link_to collab.title, wiki_path(collab), :class => 'rq-link' %>
<% end %>
最终不需要使用collect方法。