0

我刚开始使用 Ruby。我正在 Sinatra 中制作一个小应用程序,并且正在使用带有 sqlite3 db 的 Datamapper。

以下是我正在创建的三个模型。

class Team
  include DataMapper::Resource
  property :id, Serial
  property :name, String, :required => true
  property :created_at, DateTime
  property :updated_at, DateTime
end

class Poll
  include DataMapper::Resource
  property :id, Serial
  property :name, String, :required => true
  property :created_at, DateTime
  property :updated_at, DateTime
end

class Ranking
  include DataMapper::Resource
  property :year, Integer
  property :week, Integer
  property :ranking, Integer
  property :votes, Integer
  property :created_at, DateTime
  property :updated_at, DateTime

  belongs_to :team, :key => true
  belongs_to :poll, :key => true
end

我想要做的是查询某个民意调查、周和年的排名模型。

返回的结果应该是该轮询的所有排名与相关团队到每个排名编号。

因此,请获取每个排名的排名和相应的团队,例如 2011 - 第 1 周或 2011 - 第 7 周等...

我整天都在努力弄清楚如何让它发挥作用,但我无处可去,所以这就是为什么我现在在这里发帖寻求帮助。

4

1 回答 1

0

首先让我说我从未听说过 Datamapper gem。继续思考 Rails 模型和迁移对我来说会更容易,所以我希望你不介意我这样做。

我对数据模型有一些评论:

  • 除非我误解了您的模型,否则我认为所有与日期相关的字段都应该放在民意调查表而不是排名表中。排名表中的字段应该描述团队和民意调查之间的关系。
  • 您应该使用单个字段作为投票日期,然后使用类似于commercial控制器中的方法来检索某一周内的投票。(来源:http ://apidock.com/ruby/Date/commercial/class )
  • 如果您愿意,您还可以存储与投票相关的其他数据,例如投票总数。这些也将进入民意调查表。

楷模

应用程序/模型/team.rb

class Team < ActiveRecord::Base
    has_many :rankings
    has_many :polls, through: :rankings
    validates :name, :presence => true
end

应用程序/模型/poll.rb

class Poll < ActiveRecord::Base
    has_many :rankings
    has_many :teams, through: :rankings
    validates :name, :presence => true
end

应用程序/模型/ranking.rb

class Ranking < ActiveRecord::Base
    belongs_to :team
    belongs_to :poll
end

迁移

db/migrate/create_teams.rb

class CreateTeams < ActiveRecord::Migration
    def change
        create_table :teams do |t|
            t.string :name
            t.timestamps
        end
    end
end

db/migrate/create_polls.rb

class CreatePolls < ActiveRecord::Migration
    def change
        create_table :polls do |t|
            t.string :name
            t.date :published_at
            t.timestamps
        end
    end
end

db/migrate/create_rankings.rb

class CreateRankings < ActiveRecord::Migration
    def change
        create_table :rankings do |t|
            t.integer :team_id
            t.integer :poll_id
            t.integer :votes
            t.integer :ranking
            t.timestamps
        end
    end
end

请让我知道您是否设法让它工作,因为我没有时间设置测试应用程序来检查关系。

于 2012-08-12T04:06:40.433 回答