Как вы оцениваете несколько атрибутов одного и того же объекта? - PullRequest
1 голос
/ 01 февраля 2010

Я не рассматривал эту функцию как плагин и задавался вопросом, как этого добиться, будем надеяться, используя рельсы.

Мне нужна функция, позволяющая оценивать один объект (фильм) по различным атрибутам, таким как сюжет, развлечения, оригинальность и т. Д. На одной странице / форме.

Может кто-нибудь помочь?

Ответы [ 3 ]

1 голос
/ 01 февраля 2010

Я не думаю, что вам нужен плагин, чтобы сделать это ... вы могли бы сделать следующее с AR

class Film < ActiveRecord::Base
  has_many :ratings, :as => :rateable

  def rating_for(field)
    ratings.find_by_name(field).value
  end

  def rating_for=(field, value)
    rating = nil
    begin
      rating = ratigns.find_by_name(field)
      if rating.nil?
        rating = Rating.create!(:rateable => self, :name => field, :value => value)
      else
        rating.update_attributes!(:value => value)
      end
    rescue ActiveRecord::RecordInvalid
      self.errors.add_to_base(rating.errors.full_messages.join("\n"))
    end
  end

end

class Rating < ActiveRecord::Base
  # Has the following field:
  # column :rateable_id, Integer
  # column :name, String
  # column :value, Integer
  belongs_to :rateable, :polymorphic => true
  validates_inclusion_of :value, :in => (1..5)
  validates_uniqueness_of :name, :scope => :rateable_id

end

Конечно, при таком подходе у вас будет репликация в имени рейтинга, что не так уж и плохо (нормализация таблиц только для одного поля не сокращает его).

0 голосов
/ 03 февраля 2010

Вот еще один, возможно, более надежный плагин для рейтинга ... он был уже давно и был переработан для работы с Rails 2

http://agilewebdevelopment.com/plugins/acts_as_rateable

0 голосов
/ 02 февраля 2010

Вы также можете использовать плагин ajaxfull-rating

...