我在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 %>
答案 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 routes
和controller
检出),您需要确保{{1}文件没有搞乱。
同样,这将在您的日志中突出显示:)