在rails 4中创建具有不同范围的新视图

时间:2014-07-15 12:13:44

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我有一个Post模型:

class Post < ActiveRecord::Base
  belongs_to :category
  belongs_to :user

  scope :my_revisions, ->(user){ where("posts.user_id = ?", user.id)}
  scope :visible_posts, -> {where(visible: true)}
  scope :pending_posts, -> {where(visible: false)}
end

当我去http://127.0.0.1:3000/posts时,我会看到我的所有帖子。我现在要做的是创建一个新视图“revision.html.erb”,它将向我显示布尔字段“visible”设置为false的帖子,当我转到http://127.0.0.1:3000/posts/revisions

我在视图的posts文件夹中创建了视图“revision.html.erb”,并输入routes.rb:

  get 'posts/revisions'

我收到“找不到帖子'id'=修订版” 看起来它正试图进入控制器中的前置过滤器

before_action :set_post, only: [:show, :edit, :update, :destroy]

但正如您所看到的,它设置为仅显示,编辑,更新和销毁......

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这个错误的原因是Rails认为&#34;修订&#34;是一个id,并试图为你查找一个显然无法工作的人。

你可以这样做

# routes.rb
resources :posts do
  get 'revisions', on: :collection
end

# posts_controller
def revisions
  @posts = Post.where(...)
end

可以在the Rails guides about routing

中详细了解相关内容