ActiveRecord, только объекты с нулевой родительской записью - PullRequest
0 голосов
/ 02 апреля 2012

У меня настроен базовый форум.Я хочу, чтобы действие posts # index показывало только записи, в которых parent_post_id равен nil, и поэтому не является ответным сообщением.У меня установлен squeel, но я не уверен, правильно ли он настроен.

  #app/controllers/posts_controller.rb
  def index
    @forum = Forum.find(params[:forum_id])
    @posts = @forum.posts.where{ |post| post.thread == nil }
  end

 #app/models/post.rb
class Post < ActiveRecord::Base
  has_many :replies, :class_name => "Post"
  belongs_to :thread, :class_name => "Post", :foreign_key => "parent_post_id"
end

#config/initializers/squeel.rb
Squeel.configure do |config|
  # To load hash extensions (to allow for AND (&), OR (|), and NOT (-) against
  # hashes of conditions)
  config.load_core_extensions :hash

  # To load symbol extensions (for a subset of the old MetaWhere functionality,
  # via ARel predicate methods on Symbols: :name.matches, etc)
  config.load_core_extensions :symbol

  # To load both hash and symbol extensions
  config.load_core_extensions :hash, :symbol
end

1 Ответ

1 голос
/ 02 апреля 2012

Попробуйте

@posts = @forum.posts.where{ "posts.parent_post_id is null" }

См

Условия раздел http://api.rubyonrails.org/classes/ActiveRecord/Base.html

Мы говорим «сообщения», а не «пост», поскольку имя таблицы «посты»

Добавлено Вам не нужен squeel для этого простого условия where. Мы говорим «является нулем», поскольку это правильный синтаксис SQL для поиска значений nil, а не «== nil».

...