来自User.rb的未定义方法`follow'

时间:2013-11-02 20:24:35

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

Rails 3.2 newb。

该应用程序是推特。

更新3:Progess已经完成。我在@phriends中将:phriends更改为buddies.html.erb,现在通知user don't exist自动出现..但至少页面加载..然后“添加/减去”给我{ {1}}

更新2:"No route matches [POST] "/buddies" model_name'代表NilClass:Class“`for @phriends ...我不认为rails喜欢我在一页上做了很多。

更新:"undefined method 我两次不同地得到了这个错误。

这来自我的User.rb模型

"Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id"

到我的user_controller.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.destroy follower_id: self.id, followed_id: user.id
 end

观看/ user / buddies.html.erb

def buddies
@phriends = User.find_by_username(params[:username])

                if current_user.following? @phriends
                        current_user.unfollow @phriends 
                        else
                    current_user.follow @phriends 
                    end

正如您所知,我正在尝试通过输入正确的用户名来关注/取消关注。

我有一种感觉我错了,因为那不起作用。

控制器的另一个选择是......

<%= form_for @phriends do |f| %>
<%= f.text_field :username, placheholder:"username" %>
<%= f.submit "Add/Subtract" %>

但是后来它抱怨我没有ID ......无法破解这最后一个问题。

这是一个多功能的页面btw ..破坏规则。

P.S。额外信用:此页面还显示我关注的所有推文......我怎么说,每个用户只显示最新的推文......?

1 个答案:

答案 0 :(得分:0)

如果仅在控制器中的未定义方法中出现问题则很容易 - 您应该从current_user调用方法

def buddies
  @phriends = User.find_by_username(params[:username])
  if @phriends
    if current_user.following? @phriends
      current_user.unfollow @phriends
    else
      current_user.follow @phriends
    end
  else
    # @phriends is nil do smth for example
    flash[:notice] = "User with username #{params[:username]} is not found"
  end
end

更新:请注意,因为代码@phriends = User.find_by_username(params[:username])可以返回nil,您可以获得nil.some_method。您可以添加检查@phriends是否为零

ruby​​中的PS nil与布尔值

false相同