NoMethodError в Истории # шоу - PullRequest
0 голосов
/ 04 апреля 2020

Я следовал инструкциям из Просто Rails 2, но я получил NoMethodError

это моя модель story.rb:

class Story < ApplicationRecord
    validates :name, :link, presence: true
    has_many :votes do 
        def latest
            find :all, :order => 'id DECS', :limit => 3
        end
    end
end

это мое шоу. html .haml view :

%h2
  %span#vote_score
  Score: #{@story.votes.size}
 = @story.name


#vote_form
  = form_for @story, method: "post", :url => story_votes_path(@story) do
    = submit_tag 'shove it'

%ul#vote_history
  - if @story.votes.empty?
    %em No shoves yet!
  - else
    = render :partial => 'votes/vote', :collection => @story.votes.latest

%p
  = link_to @story.link, @story.link

Полное описание ошибки:

undefined method `latest' for #<Vote::ActiveRecord_Associations_CollectionProxy:0x00007f4234aea9c0>
Did you mean?  last

Extracted source (around line #15):

%em No shoves yet!
  - else
    = render :partial => 'votes/vote', :collection => @story.votes.latest ##this is line 15

%p
  = link_to @story.link, @story.link

Rails.root: /home/kevin/shovell2

Может кто-нибудь помочь мне решить эту проблему? Спасибо.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вам необходимо добавить последнюю версию в модель голосования, а не в модель истории. И это может быть так вместо метода.

class Vote < ApplicationRecord
  ...
  scope :latest, -> { order('id DESC').limit(3) }
  ...
end
0 голосов
/ 04 апреля 2020

Вы уверены, что хотите передать этот блок has_many? Я думаю, что вы хотите объявить этот метод latest в модели Vote, возможно, область действия

scope :latest, -> { order('id DESC').limit(3) } 

или то же самое с методом

def self.latest
  order('id DESC').limit(3)
end

Примечание о версия рельсов, которую вы используете: вы делаете свою модель подклассом ApplicationRecord, и она существует в последних версиях рельсов (вероятно, от рельсов 5 и выше). С другой стороны, этот метод выглядит из очень старой версии рельсов, вероятно, 2 find :all, :order => 'id DECS', :limit => 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...