2014-09-03 95 views
0

所以我試圖記錄一個鏈接被點擊的次數,但不能超過最後的障礙。鏈接被點擊的次數

我見到目前爲止以下內容:

的config/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

類ClicksController < 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 %> 

首先,這個設置看起來是否正確,沒有人看到我可能出錯的地方嗎? 其次,我不知道如何設置我的視圖,以便當點擊現有的鏈接點擊註冊和計數增加?

感謝

回答

0

用下面的解決了click實例。

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文件。

0

在我看來,你應該做兩件事情:

1)將所有的「點擊」的方法到模型

例如,你可以刪除你的ClicksController並加上:

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

這段代碼的小記錄:你有一個唯一性驗證你的c頌。事實上,當文章和IP地址已經存在點擊時,create方法將返回false。請勿使用create!,否則會引發異常。

2)添加過濾器:

你可以簡單地在你的ArticlesController添加過濾器。在每個show,它會創建爲觀看article

class ArticlesController 
    before_filter :create_click, :only => [ :show ] 

    def create_click 
    @article.create_click(ip_address) 
    end 
end 
+0

感謝@ForgetTheNorm,我實際上只是通過用'<%= link_to paper_article_views_path(article.id,article),method :: post,target:'_blank'do%>'替換原來的link_to來實現這個工作,但是我仍然得不到的是爲什麼我需要給路由'article.id'和'文章'?我想通過試驗和錯誤..謝謝 – Robbo 2014-09-03 14:47:18

+0

@James編輯您的原始消息,並分享你的'config/routes',你的路線很奇怪。 – pierallard 2014-09-03 14:51:43

+0

我已經添加了'routes.rb'。你是說路線嵌套的方式是我不得不將'article.id'和'article'放到路線上的原因嗎?歡呼聲 – Robbo 2014-09-03 15:44:42