0

Rails 3.2 新版本。

该应用程序是推特。

更新3:已经取得进展。我改成@phriendsin :phriendsbuddies.html.erb现在通知user don't exist会自动出现..但至少页面加载..然后“加/减”给了我"No route matches [POST] "/buddies"

更新 2:"undefined methodNilClass 的 model_name':Class"` 为 @phriends ......我不认为 rails 喜欢我在一页上做了很多事情。

更新:"Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id" 我两次收到此错误两次。

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

到我的 user_controller.rb

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

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

到views/user/buddies.html.erb

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

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

我有一种感觉我错了,因为那行不通。

控制器的另一个选项是这个......

 @phriends = User.find_by_username(params[:username])  
                if current_user.following? @phriends
                        relationship_path, method: :delete
                        else
                    @relationship
                    end

                 @relationship = Relationship.where(
                                  follower_id: current_user.id,
                                   followed_id: @user.id
                                  ).first_or_initialize if current_user

但后来它抱怨我没有身份证……无法破解最后一个问题。

顺便说一句,这是一个一体化的页面……有点违反规则。

PS Extra Credit:此页面还显示了我关注的所有推文......我怎么说,只显示每个用户最近的推文......?

4

1 回答 1

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

于 2013-11-02T20:54:31.177 回答