我正在通过迈克尔·哈特尔的ruby on rails教程,没有太多麻烦(至少不是很多,我没有能够通过一些观察/思考/搜索来解决)但我坚持错误我在第11章尝试实现关系模型时得到。
具体来说,按下follow / unfollow按钮会返回以下错误:
ActiveRecord::RecordNotFound in RelationshipsController#create
Couldn't find User with id=#<User:0x007f3288020d98>
Extracted source (around line #5):
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
redirect_to @user
end
我可以说问题是它正在搜索的用户ID应该只是一个整数,而不是#,但我不确定为什么它会搜索看起来像十六进制代码而不是用户ID的东西。
RelationshipsController与教程中给出的完全相同:
class RelationshipsController < ApplicationController
before_action :signed_in_user
def create
@user = User.find(params[:relationship][:followed_id])
current_user.follow!(@user)
redirect_to @user
end
def destroy
@user = Relationship.find(params[:id]).followed
current_user.unfollow!(@user)
redirect_to @user
end
end
我能想到的唯一显着差异是我使用的是postgres而不是sqlite,但是由于切换到postgres作为练习,我无法想象它会导致这类问题。
我尝试寻找类似的问题,但我找不到任何东西 - 任何帮助都会很棒。
(编辑)
呈现follow / unfollow按钮的表单是:
<% unless current_user?(@user) %>
<div id="follow_form">
<% if current_user.following?(@user) %>
<%= render 'unfollow' %>
<% else %>
<%= render 'follow' %>
<% end %>
</div>
<% end %>
按钮本身:
<%= form_for (current_user.relationships.build(followed_id: @user)) do |f| %>
<div><%= f.hidden_field :followed_id %></div>
<%= f.submit "Follow", class: "btn btn-large btn-primary" %>
<% end %>
和
<%= form_for(current_user.relationships.find_by(followed_id: @user), html: { method: :delete }) do |f| %>
<%= f.submit "Unfollow", class: "btn btn-large" %>
<% end %>
UsersController的show方法是
class UsersController < ApplicationController
before_action :signed_in_user, only: [:index, :edit, :update, :destroy, :following, :followers]
before_action :correct_user, only: [:edit, :update]
before_action :admin_user, only: :destroy
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
if current_user?(@user)
@micropost = current_user.microposts.build
end
end
.
.
.
答案 0 :(得分:0)
您希望用户的ID不是用户对象本身,因此请更改follow
的部分内容:
followed_id: @user.id
代替followed_id: @user