【问题标题】:Can't unfollow user because of Postgres由于 Postgres 无法取消关注用户
【发布时间】:2013-11-19 21:20:21
【问题描述】:

Rails 3.2,Twitter 应用

更新:已解决但知道为什么它可能会工作一次,然后当我再次尝试时,我在第 16 行得到Unknown key: #<User:0x007f9a5a946708> @user users_controller.rb。如果我更新状态或重新登录就可以了。

解决方案:在每个 if/else 下添加 notice: "Added", redirect_to_path 后,它工作正常。我无法为“找不到用户”生成错误。

我有一个form_for,我输入:username,它会关注或取消关注。取消关注不起作用。看起来像这样。

Error

PG::UndefinedTable: ERROR: missing FROM-clause entry for table "id" LINE 1: DELETE FROM "relationships" WHERE "id"."follower_id" = 1 AND... ^ : DELETE FROM "relationships" WHERE "id"."follower_id" = 1 AND "id"."followed_id" = 2

id 不见了?所以我认为问题出在relationship_controller.rb

/users/buddies.html.erb

<%= form_for :username, :url => {:action => :buddies} do |f| %>
<%= f.text_field @user, placeholder: "username" %>
<%= f.submit "Add/Subtract" %>
<% end %>

users_controller.rb

@user = User.find_by_username(params[:username])

            if @user
                unless @user.blank?
                if current_user.following? @user
                    current_user.unfollow @user
                  else
                    current_user.follow @user
                end
              else
                flash[:error] = "stupid error";
                end
            end

user.rb

  def following? user
   self.followeds.include? user
  end

  def follow user
    Relationship.create follower_id: self.id, followed_id: user.id
  end

 def unfollow user
   Relationship.delete follower_id: self.id, followed_id: user.id
 end

relationships_controller.rb

def create

    @relationship = Relationship.new(params[:relationship]) 
    #@relationship.followed_id = params[:followed_id]
    @relationship.follower_id = current_user.id

    if @relationship.save
        redirect_to buddies_path, notice: "Phriend added"
        else
        flash[:error] = "Phriend not added";
        redirect_to buddies_path
    end
end

def delete
    @relationship = Relationship.find(params[:id])
    @relationship.delete
    redirect_to buddies_path, notice: "Phriend subtracted"
end

这么多字,但看看Relationship.delete..那里需要改变什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 postgresql twitter


    【解决方案1】:

    Relationship.delete 需要一个 id。尝试类似:

    # app/models/user.rb
    def unfollow user
      Relationship.where(:follower_id => self.id, :followed_id => user.id).first.delete
    end
    

    或者,也许更清楚一点,如果跟随的是关系:

    def unfollow user
      self.followeds.where(:followed_id => user.id).first.delete
    end
    #didn't work for @ladiesman217
    

    【讨论】:

    • 是的,你成功了。但是添加你的冒号!然后它起作用了。我用的是第一个。第二个没那么热。谢谢。
    • 很高兴它成功了。精氨酸。我在followed: user.id:followed =&gt; user.id 语法之间切换。接得好。另外,我看到 follows 实际上不是一个关联,而是一个集合。很高兴您找到了解决方案。
    • 您不必这样做,但是您能在此处诊断我的新错误吗?如果连续关注/取消关注两次,似乎会发生这种情况。
    • 对于您的 Flash 消息,这取决于您是否重定向错误。如果您只是渲染,请使用flash.now[:error] = 'stupid error'。这将填充闪存错误以供立即使用。至于另一个错误,看起来您正在传递模型(用户)的实例,而它可能应该是符号或字符串,具体取决于问题所在。我不知道 16 号线及其周围有什么。顺便说一句,你有没有看过 this twitter clone tutorial 的想法?
    • 该教程是我复制的:P 我正在构建一些稍微不同的东西。我也解决了这个问题,我只需要在我的 if 语句中的每个 .follow .unfollow 下添加一个 notice/redirect 行。
    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    相关资源
    最近更新 更多