计算单击链接的次数

时间:2014-09-03 14:30:24

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

所以我试图记录链接被点击但无法克服最后一道障碍的次数。

到目前为止,我有以下内容:

配置/ routes.rb中

resources :papers do 

    resources :articles do

        resources :clicks
    end 
end

click.rb

class Click < ActiveRecord::Base

    belongs_to :article, counter_cache: true

    validates :ip_address, uniqueness: {scope: :article_id}
end

clicks_controller.rb

class ClicksController&lt; ApplicationController中

def create

        @article = Article.find(params[:article_id])

        @click = @article.clicks.new(ip_address: request.ip)

        @click.save

    end
end

article.rb

class Article < ActiveRecord::Base


  has_many :clicks

end

schema.rb

  create_table "clicks", force: true do |t|
    t.integer  "article_id"
    t.string   "ip_address"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "articles", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.text     "title"
    t.string   "url"
    t.integer  "paper_id"
    t.integer  "clicks_count"
  end

index.html.erb - 文章

<% @articles.each do |article| %>

   <div class="articles col-md-4">

   <%= link_to article.url,  target: '_blank' do %>

   <h4><%= article.title %></h4>
   <h5><%= article.paper.name.upcase %></h5>
   <h6><%= article.created_at.strftime("%d %B %y") %></h6>
<% end %>

首先,这个设置看起来是否正确,有人看到我可能出错的地方吗? 其次,我不知道如何设置我的视图,以便在点击现有链接时注册点击并且计数上升?

由于

2 个答案:

答案 0 :(得分:1)

解决了以下问题。

<强> clicks_controller.rb

原件:

def create

        @article = Article.find(params[:article_id])

        @click = @article.clicks.new(ip_address: request.ip)

        @click.save

    end
end

修订:

def create

        @article = Article.find(params[:article_id])

        @click = @article.clicks.new(ip_address: request.ip)

        @click.save

        redirect_to @article.url


    end
end

index.html.erb - 文章

原件:

<%= link_to article.url,  target: '_blank' do %>

修订:

<%= link_to paper_article_views_path(article.id, article), method: :post,  target: '_blank' do %>

另外,我编辑了原始问题以包含routes.rb文件。

答案 1 :(得分:0)

在我看来,你应该做两件事:

1)设置&#34;点击&#34;的所有方法进入模型

例如,您可以删除ClicksController并添加此内容:

class Article
  def create_click(ip_address)
    self.clicks.create({ :ip_address => ip_address })
  end
end

使用此代码的一点注意事项:您的代码中有唯一性验证。实际上,当文章和IP地址已经存在点击时,create方法将返回false。不要使用create!,否则会引发异常。

2)添加过滤器:

您只需在ArticlesController中添加过滤条件即可。在每个show,它会为查看的click

创建article个实例
class ArticlesController
  before_filter :create_click, :only => [ :show ]

  def create_click
     @article.create_click(ip_address)
  end
end