Hartl教程无法关注用户

时间:2014-07-14 04:51:00

标签: ruby-on-rails

我在Michael Hartl教程的第11章,无法关注用户。我点击了关注按钮但没有任何反应。我一遍又一遍地浏览了那个部分,复制并粘贴了代码。它仍然无法运作。

以下是代码:

relationships_controller.rb

class RelationshipsController < ApplicationController
before_action :signed_in_user

def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end

def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
respond_to do |format|
  format.html { redirect_to @user }
  format.js
end
end
end

create.js.erb

$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= @user.followers.count %>')

destroy.js.erb

$("#follow_form").html("<%= escape_javascript(render('users/follow')) %>")
$("#followers").html('<%= @user.followers.count %>')

_follow.html.erb

<%= form_for(current_user.relationships.build(followed_id: @user.id),
         remote: true) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>

_unfollow.html.erb

<%= form_for(current_user.relationships.find_by(followed_id: @user.id),
         html: { method: :delete },
         remote: true) do |f| %>
<%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>

_follow_form.html.erb

<% unless current_user?(@user) %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>

1 个答案:

答案 0 :(得分:0)

没有看到你的日志,这是一场猜测游戏

-

但是,有许多事情需要研究。

创建

首先,您需要确保create操作可以实际执行您想要的操作。我注意到有一个方法.follow!包括在内:

def create
    @user = User.find(params[:relationship][:followed_id])
    current_user.follow!(@user)
    respond_to do |format|
      format.html { redirect_to @user }
      format.js
    end
end

由于您使用的是bang operator,因此通常意味着它将对对象本身(或在调用时)执行一个函数。在这种程度上,您需要确保在.follow!模型中使用User实例方法

我希望如下:

#app/models/user.rb
Class User < ActiveRecord::Base
   has_many :relationships 

   def follow!(friend)
       self.relationships.create({follower_id = friend.id})
   end
end

-

<强>表单

当您使用form_for时,您需要确保拨打正确的路线。我注意到Hartl在尝试填充ActiveRecord Object之前没有创建form_for - 这意味着这可能会导致问题。

由于您使用的是partial,我实际上理解为什么要这样做。但是,可能是表格没有点击正确的action,或者它没有发送你想要的参数

虽然我很想详细说明,但我不能不看日志

-

<强>的Ajax

最后,您可能希望考虑Ajax的响应。

我发现您在发送.js.erb请求时正在使用remote方法执行操作。也许这些文件的功能不正确?

这可能是一个问题 - 如果您没有看到系统的任何其他问题(IE routescontroller检出),您需要确保{{1}文件没有搞乱。

同样,这将在您的日志中突出显示:)