哈特尔的轨道教程错误"Couldn't find User with id=#<User:0x00000007472a28>"



我正在学习迈克尔·哈特尔的 ruby on rails 教程,没有太多麻烦(至少我没有太多通过一些查找/思考/搜索来解决的问题),但我在尝试实现第 11 章的关系模型时遇到了一个错误。

具体来说,点击关注/取消关注按钮会返回以下错误:

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 的东西。

关系控制器与教程中给出的完全相同:

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 是一种练习,我无法想象它会导致这种问题。

我尝试搜索类似的问题,但我找不到任何东西 - 任何帮助都会很棒。

(编辑)

呈现关注/取消关注按钮的窗体为:

<% 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 %>

用户控制器的显示方法是

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
  .
  .
  .

您希望用户的 id 而不是用户对象本身,因此更改follow

的部分具有:

followed_id: @user.id而不是followed_id: @user

相关内容

最新更新