ruby-on-rails – 为什么总是这样?轨道
def follows(follower,followed) follow = Follows.where("follower = ? AND followed = ?",follower,followed) if follow true else false end end 这是我的观看代码: <% if current_user.id == @user.id%> <p>This is you!</p> <% else %> <% if follows(current_user.id,@user.id)%> <p>You already follow <%= @user.username %> <% else %> <p><%= link_to "Follow!",follow_path(@user.id) %></p> <% end %> <% end %> 我想检查用户是否跟随另一个用户,所以写了这个.它接收两个用户ID,并查询数据库,并在找到匹配时返回true,否则返回false.但它总是回归真实.为什么是这样? 解决方法
让我们先从一些风格和设计问题开始,然后以实际答案结束:
>模型按惯例是单数的.否则只会让你工作更多.在这种情况下,我建议使用以下作为合适的名称,如“用户有许多关注”. 最后,考虑到所有这些因素,答案是: class User < ActiveRecord::Base has_many :followings,:class_name => 'Following',:foreign_key => 'followed_id' has_many :followers,:through => 'followings' def follows?(other) other.followed_by? self end def followed_by?(other) followers.include? other end end 注意:使用follow_by?这里的方法是使用double dispatch,其防止一个用户的(次要)Law of Demeter violation直接知道另一个用户的关注者的状态.相反,第一个用户对象向第二个用户对象询问一个直接问题(“你跟着我吗?”)并将结果基于答案. (它本身也可能是一种有用的方法.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |