如何从连接表中进行选择?

时间:2015-07-07 09:18:43

标签: ruby-on-rails ruby-on-rails-4

请帮助解决问题。

一组帖子和一组标签:

  create_table "posts", force: :cascade do |t|
    t.string   "title"
    t.text     "body"
    t.integer  "user_id"
    t.integer  "views",      default: 0
  end

  create_table "posts_tags", id: false, force: :cascade do |t|
    t.integer "post_id"
    t.integer "tag_id"
  end

  create_table "tags", force: :cascade do |t|
    t.string   "tagname"
  end

SQL:

CREATE TABLE "tags" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "tagname" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL)

CREATE TABLE "posts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "body" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "user_id" integer, "views" integer DEFAULT 0)

我需要获取附加到帖子的标签数量(使用过的标签)。

我尝试这样做:

@tags_used_count = ::Tag.joins('posts_tags').group('tag_id').distinct.count

但是我得到了错误消息:

  

在Admin :: Users#index显示中的ActiveRecord :: StatementInvalid   /home/kalinin/rails/ZSUM/app/views/layouts/_admin_header_area.html.erb   第28行引出的地方:SQLite3 :: SQLException:没有这样的列:tags.id:   SELECT DISTINCT COUNT(DISTINCT" tags"。" id")AS count_id,tag_id AS   tag_id FROM" tags" posts_tags GROUP BY tag_id

3 个答案:

答案 0 :(得分:0)

您的代码表没有id列。

您应该使用:

create_table "tags", force: :cascade do |t|
    t.integer  "id"
    t.string   "tagname"
end

此外,您的帖子表应该有一个id列。即:

  create_table "posts", force: :cascade do |t|
    t.integer  "id"
    t.string   "title"
    t.text     "body"
    t.integer  "user_id"
    t.integer  "views",      default: 0
  end

答案 1 :(得分:0)

如果我正确地提出你的问题,下面的事情应该有效。

var resizeTimer;

$(window).load(function(){
   $(window).trigger('resize');
});

$(window).resize(function(e){
    var windowH = $(window).height(),
        windowW = $(window).width();

    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(function() {
       $('#iframe').attr('src','http://tools.fxempire.com/sidebar- quotes.php?instruments=5,10,1,2,4,3&width='+windowW+'&height='+windowH+'&text_color=333&text_hover_color=082F60');

       $('#iframe').css({'height':windowH+'px', 'width':windowW+'px'}); 

     }, 250);


})

答案 2 :(得分:0)

试试这个:

::Tag.joins(:posts_tags).group('posts_tags.tag_id').distinct.count