Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 充当安装的跟随者_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 充当安装的跟随者

Ruby on rails 充当安装的跟随者,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我试图用它来工作,但我肯定是在路线上做错了什么 添加了gem: gem'充当追随者 在用户模型中: 充当跟随者 作为可遵循的行为 在Post模型中: class Post < ActiveRecord::Base belongs_to :user mount_uploader :avatar, AvatarUploader acts_as_followable end 作为可遵循的行为 在我的页面控制器中: class PageController < Ap

我试图用它来工作,但我肯定是在路线上做错了什么

添加了gem:

gem'充当追随者

在用户模型中:

充当跟随者

作为可遵循的行为

在Post模型中:

class Post < ActiveRecord::Base
    belongs_to :user
    mount_uploader :avatar, AvatarUploader
    acts_as_followable
end
作为可遵循的行为

在我的页面控制器中:

class PageController < ApplicationController
  def index
  end

  def profile
    @posts = Post.all.order("created_at desc").where( "user_id = ?", User.find_by_id(params[:id]) )
    @post = Post.new  
  end

  def feed
    @posts = Post.all.order("RANDOM()")
  end

  def home

  end

  def follow
    @user = User.find(params[:id])
    current_user.follow(@user)
  end

  def unfollow
    @user = User.find(params[:id])
    current_user.stop_following(@user)
  end

  def block
    @user = User.find(params[:id])
    @post.block(@user)
  end
end
问题是,即使Users表(designe)没有user\u id列,当user\u id设置为nil时,我总是会得到一个异常错误

当我在控制器中定义@user时,它为什么要搜索用户id

问题是否在routes.rb中

更新

全柱模型:

class Post < ActiveRecord::Base
    belongs_to :user
    mount_uploader :avatar, AvatarUploader
    acts_as_followable
end
纵断面图:

<%= link_to "Back", root_path %>
<%= link_to "Follow", follow_user_path(@user) %>
<br>
<br>
<%= render 'posts/form' %>

<br>
<br>
<% @posts.each do |post| %>
    <p><%= post.description %>, <%= time_ago_in_words(post.created_at) %> ago</p>
       <%= image_tag post.avatar, :class => "tumbnial" %>
       <br>
        <% if user_signed_in? %>
            <% if post.user_id == current_user.id %>
                <%= link_to "Delete post", post_path(post), :method => :delete %>
            <% end %>
        <% end %>
<% end %>





,前

“tumbnial”%>
:删除%>
@Raymond看起来您在
配置文件中错过了
@user
实例的初始化操作:

  def profile
    @user = User.find(params[:id])
    @posts = Post.all.order("created_at desc").where(user_id: @user.id)
    @post = Post.new  
  end
还要注意的是,当您使用
find\u by\u id(…)
查找用户时,如果找不到用户,您将得到nil,所以在下一个代码中可能是不正确的行为。最好使用
find(…)
,这将引发异常,您可以以某种方式处理它,例如通过重定向到包含有关该异常的flash消息的某个页面,或者您可以使用
find by_id
执行相同的操作,但请确保找到了用户

在采取行动之前,最好将此功能提取到某些功能中,例如:

class PageController < ApplicationController
  before_action :load_user, only: [:profile, :follow, :unfollow, :block]
  def profile
    @posts = Post.all.order("created_at desc").where(user_id: @user.id)
    @post = Post.new  
  end

  def feed
    @posts = Post.all.order("RANDOM()")
  end

  def home; end

  def follow
    current_user.follow(@user)
  end

  def unfollow
    current_user.stop_following(@user)
  end

  def block
    @post.block(@user)
  end

  private

  def load_user
    @user = User.find_by_id(params[:id])
    # here you can redirect to some place with flash message if @user.blank?
  end
end
class PageController
查看您的模型和完整的异常日志会很有帮助。@BorisPilgun,更新了问题OK,请同时添加app/views/page/profile.html.erb的内容,并在其中呈现部分内容(如果有)。-正如您从日志中看到的,从那里开始出现错误。另外,如果您可以将完整错误与错误消息和错误描述(如果存在)一起包含,则只包含堆栈跟踪。不要犹豫,添加尽可能多的调试信息,它简化了过程:)@BorisPilgun我添加了纵断面图代码,但对于错误日志,我已经全部发布了。错误基本上是从
你是一个救生员开始的:P
  def profile
    @user = User.find(params[:id])
    @posts = Post.all.order("created_at desc").where(user_id: @user.id)
    @post = Post.new  
  end
class PageController < ApplicationController
  before_action :load_user, only: [:profile, :follow, :unfollow, :block]
  def profile
    @posts = Post.all.order("created_at desc").where(user_id: @user.id)
    @post = Post.new  
  end

  def feed
    @posts = Post.all.order("RANDOM()")
  end

  def home; end

  def follow
    current_user.follow(@user)
  end

  def unfollow
    current_user.stop_following(@user)
  end

  def block
    @post.block(@user)
  end

  private

  def load_user
    @user = User.find_by_id(params[:id])
    # here you can redirect to some place with flash message if @user.blank?
  end
end