如何在我的Rails 3代码中使用此类方法?

时间:2013-04-06 06:59:33

标签: ruby-on-rails ruby

我真的希望今晚得到解决,所以任何帮助都会很棒。

我将这个类方法添加到我的post.rb模型

  def self.without_review
    where(review: false)
  end

我要做的是仅显示网站上review = false的所有帖子。如果review = true,我想在显示它们之前手动批准它们。现在,无论评论是真还是假,所有帖子都会显示出来。

这是我的帖子控制器

class PostsController < ApplicationController
  before_filter :signed_in_user
  before_filter :load_post, only: :destroy

    def create
    @post = current_user.posts.build(params[:post])
    if @post.save
      flash[:success] = "Shared!"
      redirect_to root_path
    else
      @feed_items = []
      render 'static_pages/home'
    end
  end

  def destroy
    @post.destroy
    redirect_to root_path
  end

  private

    def correct_user
      @post = current_user.posts.find_by_id(params[:id])
      redirect_to root_path if @post.nil?
    end

    def load_post
      @post = current_user.admin? ? Post.find(params[:id]) : current_user.posts.find(params[:id])
    end

end

这是完整的post.rb模型

class Post < ActiveRecord::Base
  attr_accessible :content, :review
  belongs_to :user
  validates :user_id, presence: true
  validates :content, presence: true

  default_scope order: 'posts.created_at DESC'

      def self.without_review
    where(review: false)
  end


end

posts表的架构,用于显示如何设置“review”(最后一行)

create_table "posts", :force => true do |t|
    t.text     "content"
    t.integer  "user_id"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.boolean  "review",          :default => false

静态页面控制器

class StaticPagesController < ApplicationController
  def home
    if signed_in?
      @post = current_user.posts.build
      @feed_items = current_user.feed.paginate(page: params[:page])
    end
  end


  def post1
    if signed_in?
      @post = current_user.posts.build
    end
  end


end

UsersController(def show)

def show
@user = User.find(params[:id])
@posts = @user.posts.paginate page: params[:page], :per_page => 15
end

1 个答案:

答案 0 :(得分:1)

您没有显示生成帖子实际列表的控制器/操作,但我猜您必须将Post.all替换为Post.without_review