由于 Postgres 无法取消关注用户 [英] Can't unfollow user because of Postgres
问题描述
Rails 3.2,推特应用
Rails 3.2, Twitter App
更新:Sovled 但不知道为什么它可能会工作一次,然后当我再次尝试时,我得到 Unknown key: #<User:0x007f9a5a946708>
在第 16 行 users_controller.rb
为@user.如果我更新状态或重新登录就好了.
UPDATE: Sovled but any idea why it might work once, then when i try it again, I get Unknown key: #<User:0x007f9a5a946708>
On line 16 users_controller.rb
for @user. If i update a status or re-login its fine.
解决方案:在每个 if/else 下添加 notice: "Added", redirect_to_path
后,它工作正常.我一直无法为找不到用户"产生错误.
SOLUTION: After adding a notice: "Added", redirect_to_path
under each if/else it worked fine. I haven't been able to produce an error for "user not found" tho.
我有一个 form_for
,我输入 :username
,它跟随或取消跟随.取消关注不起作用.看起来像这样.
I got a form_for
, I type in :username
, it follows or unfollows. Unfollow don't work. Looks like this.
错误
PG::UndefinedTable:错误:缺少表id"的 FROM 子句条目第 1 行:从关系"中删除id".follower_id"= 1 和...^: DELETE FROM "relationships" WHERE "id"."follower_id" = 1 AND "id"."followed_id" = 2
id 不见了?所以我认为问题出在 relationship_controller.rb
id is missing? So I think the problem is in 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..那里需要改变什么?
So that's a lot of words, but look in Relationship.delete.. what needs to change there?
推荐答案
Relationship.delete 需要一个 ID.尝试类似:
Relationship.delete is expecting an id. Try something like:
# app/models/user.rb
def unfollow user
Relationship.where(:follower_id => self.id, :followed_id => user.id).first.delete
end
或者,也许更清楚一点,如果后面是关系:
Or, perhaps a bit clearer, if followeds are relationships:
def unfollow user
self.followeds.where(:followed_id => user.id).first.delete
end
#didn't work for @ladiesman217
这篇关于由于 Postgres 无法取消关注用户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!