2012-04-02 2 views
0

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

#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

Попробуйте

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

См

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

Мы говорим "сообщения" не "после", так как имя таблицы "должности"

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

+0

К сожалению, это не работает. 'Post Load (0.1ms) SELECT« posts ». * FROM« posts »WHERE« posts ».« Forum_id »= 1' все еще то, что происходит в консоли, и все сообщения идут, а не только топ- уровня. – DVG

+0

Попробуйте ввести инструкции в самой консоли рельсов. Вы пропускаете добавленную там где предложение каким-то образом. –

+0

Да, оказывается, я возился с ним в слое просмотра – DVG

Смежные вопросы