【问题标题】:Follow user relationship关注用户关系
【发布时间】:2014-02-19 19:44:14
【问题描述】:

我正在为我的用户实现关注功能。为此,我按照 micheal hartl 教程 link required 的说明进行操作,但出现此错误:

undefined method id' for nil:NilClass  <% if current_user.following?(@user) %>

这是我的用户模型

  has_many :relationships, foreign_key: "follower_id", dependent: :destroy
  has_many :followed_users, through: :relationships, source: :followed

  has_many :reverse_relationships, foreign_key: "followed_id",
                                   class_name:  "Relationship",
                                   dependent:   :destroy
  has_many :followers, through: :reverse_relationships, source: :follower


  def following?(user)
    relationships.find_by(followed_id: user.id)
  end

  def follow!(user)
    relationships.create!(followed_id: user.id)
  end

  def unfollow!(user)
    relationships.find_by(followed_id: user.id).destroy
  end

这是我的关系模型

class Relationship < ActiveRecord::Base
    belongs_to :follower, class_name: "User"
    belongs_to :followed, class_name: "User"

    validates :follower_id, presence: true
    validates :followed_id, presence: true
end

这是我的观点

<% if current_user.id && current_user.id != user.id %>
  <div id="follow_form">
     <% if current_user.following?(@user) %>
        <%= form_for(current_user.relationships.find_by(followed_id: @user.id),
                                                html: { method: :delete }) do |f| %>
          <%= f.submit "Unfollow", class:"unfollow-button"  %>
        <% end %>
    <% else %>
        <%= form_for(current_user.relationships.build(followed_id: @user.id)) do |f| %>
            <div><%= f.hidden_field :followed_id %></div>
            <%= f.submit "Follow", class:"follow-button"  %>
    <% end %>
<% end %>

这是用户控制器

def show
    @user= User.find_by_slug(params[:id])
    if @user
      @posts= Post.all
      render action: :show
    else
      render file: 'public/404', status: 404, formats: [:html]
    end
  end

  def index
    @users = (current_user.blank? ? User.all : User.find(:all, :conditions => ["id != ?", current_user.id]))
  end

【问题讨论】:

  • 你能发布你的控制器代码吗?它可能是问题的根源。
  • 如何同时标记 rails 3 和 rails 4?您使用的是哪个版本的 Rails?

标签: ruby-on-rails relationship


【解决方案1】:

这意味着@user 为零。确保 @user 对象不为空

= debug @user

这应该打印有关@user 对象的所有详细信息。

【讨论】:

  • 我是个新手
  • 在你看来,就做&lt;%= debug @user %&gt;
  • 我没有说它可以解决你的问题。如果是 Nil,那么你必须找出原因。但它确实为您提供了一些调试信息,以了解用户的价值是什么
猜你喜欢
  • 1970-01-01
  • 2015-06-23
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多