2016-04-25 39 views
0

我需要一些帮助,使用do阻止返回错误的生成链接。我知道这是一个简单的修复,但我似乎无法弄清楚,因为我对于我这么裸露的rails非常陌生。Rails阻止返回用户而不是合作伙伴

我正在构建维基百科的应用程序克隆,其中有wiki,用户和现在的合作者。这个克隆是用于项目教程的,但在视图中实现协作者的具体步骤让我感到困惑。通过下面的代码,我得到了当前用户的用户#show上生成的链接。 我真正需要的是当前用户是协作者的维基列表。

让我知道是否需要其他代码来帮助解决此问题,并提前感谢您的帮助。

用户显示视图

<div class="col-sm-4"> 
     <div class="col-md-4"> 
     <% @collaborator.each do |collaborator| %> 
     <div class="row"> 
      <ul> 
      <li><%= link_to collaborator %></li> 
      </ul> 
     </div> 
     <% end %> 
     </div> 
    </div> 

用户控制器

def show 
    @user = User.find(params[:id]) 
    @wikis = @user.wikis 
    @wiki = Wiki.find(params[:id]) 
    @collaborators = Collaborator.all 
    @collaborator = @wiki.collaborators.find_by(:user_id => current_user.id) 
end 

用户模型

class User < ActiveRecord::Base 
    has_many :wikis 
    has_many :collaborators 
    has_many :collaborating_wikis, through: :collaborators, foreign_key: "wiki_id", class_name: "Wiki" 
    validates :wiki_id, presence: true 
end 

wiki模式

class Wiki < ActiveRecord::Base 
    belongs_to :user 
    has_many :collaborators 
    has_many :users, through: :collaborators 
    validates :user_id, presence: true 
end 

合作者型号

class Collaborator < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :wiki 
    validates :wiki_id, :user_id, presence: true 
    validates :wiki_id, uniqueness: { scope: [:wiki_id, :user_id] } 
end 
+0

嗨塔克,这将是有一个链接到GitHub库真正有用的,所以我可以克隆下来回购,并有一出戏。 – Andy

+0

你上面的代码在'@ collaborator'上执行'each'循环,而不是'@ collaborators'。 –

回答

0

什么您在大胆的文字说和粗体字前位看起来是矛盾的我,但(没有能够克隆了你代码和玩它)检索合作者是当前用户的维基集合,我怀疑你需要什么是:

控制器:
@collaborating_wikis = current_user.collaborating_wikis

而在你的看法:

​​
+0

感谢Andy,我添加了您提供的代码,并且收到以下错误消息:'无法在模型协作者中找到源协会(s)“collaborating_wiki”或:collaborating_wikis。尝试'has_many:collaboration_wikis,:through =>:协作者,:来源=>'。它是用户还是wiki?'。我的用户模型中有'has_many'关联,所以我很困惑为什么现在要做到这一点。这里是github回购,以防万一:https://github.com/tuckermullen/blocipedia并且非常感谢帮助btw! – Tucker

+0

哪个分支?我克隆了主人,但Collaborator模型不在那里。顺便问一下你的测试是否适合你? – Andy

+0

对不起,忘了提及......这是合作者分支。 – Tucker